home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #3 / Amiga Plus CD - 1997 - No. 03.iso / pd / programmierung / alienbreed3d2_src / cheesesauce / newwbhires.s < prev    next >
Text File  |  1997-01-31  |  185KB  |  13,123 lines

  1.  
  2.  
  3. *************************************************
  4. * Stuff to do to get a C2P version:
  5. * Change copperlist
  6. * Change wall drawing
  7. * change floor drawing
  8. * change object drawing
  9. * change polygon drawing (ugh)
  10. * Write a palette generator program in AMOS
  11. * to provide a good 256 colour palette and
  12. * convert all graphics files specified
  13. * (possibly included in the game linker
  14. * program).
  15. * Possibly change the wall/floor/object
  16. * palettes to look nicer with more shades.
  17. * RE-implement stippling (if not present)
  18. * as it will look gorgeous now.
  19. *************************************************
  20.  
  21. ;MIDDLEX set 96
  22. ;RIGHTX set 191
  23. ;BOTTOMY set 160 
  24.  
  25. ;MIDDLEX set 96
  26. ;RIGHTX set 191
  27. ;BOTTOMY set 160
  28.  
  29. _break    macro
  30. ;    bkpt    \1
  31.     endm
  32.  
  33.  
  34. FILTER    macro
  35. ;    move.l    d0,-(sp)
  36. ;    move.l    #65000,d0
  37. ;.loop\@
  38. ;    bchg    #1,$bfe001
  39. ;    dbra    d0,.loop\@
  40. ;    move.l    (sp)+,d0
  41.     endm
  42.  
  43. BLACK    macro
  44.     move.w    #0,$dff180
  45.     endm
  46.  
  47. RED    macro
  48.     move.w    #$f00,$dff180
  49.     endm
  50.  
  51. FLASHER macro
  52. ;    movem.l    d1,-(sp)
  53. ;    move.w    #-1,d1
  54. ;
  55. ;loop3\@
  56. ;;    move.w    #\1,$dff180
  57. ;    nop
  58. ;    nop
  59. ;    move.w    #\2,$dff180
  60. ;    nop
  61. ;    nop
  62. ;    dbra    d1,loop3\@
  63.  
  64. ;    movem.l    (sp)+,d1
  65.  
  66.     endm
  67.  
  68. GREEN    macro
  69.     move.w    #$0f0,$dff180
  70.     endm
  71.  
  72. BLUE    macro
  73.     move.w    #$f,$dff180
  74.     endm
  75.  
  76. DataCacheOff macro
  77.     movem.l    a0-a6/d0-d7,-(sp)
  78.     move.l    4.w,a6
  79.     moveq    #0,d0
  80.     move.l    #%0000000100000000,d1
  81.     jsr    _LVOCacheControl(a6)
  82.     movem.l    (sp)+,a0-a6/d0-d7
  83.     endm
  84.  
  85. DataCacheOn macro
  86.     movem.l    a0-a6/d0-d7,-(sp)
  87.     move.l    4.w,a6
  88.     moveq    #-1,d0
  89.     move.l    #%0000000100000000,d1
  90.     jsr    _LVOCacheControl(a6)
  91.     movem.l    (sp)+,a0-a6/d0-d7
  92.     endm
  93.  
  94.     opt    P=68020
  95.  
  96.     include utils:sysinc/hardware/intbits.i
  97.  
  98. CD32VER equ 0
  99.  
  100. maxscrdiv EQU 8
  101. max3ddiv EQU 5
  102. playerheight EQU 12*1024
  103. playercrouched EQU 8*1024
  104. scrheight EQU 80
  105.  
  106. ; k/j/m
  107.  
  108. ; 4/8
  109. ; s/x
  110. ; b/n
  111.  
  112. midoffset EQU 104*4*40
  113.  
  114.  
  115.  SECTION Scrn,CODE
  116. OpenLib       equ -552
  117. CloseLib      equ -414
  118.  
  119. INTREQ        equ    $09C
  120. INTENA        equ    $09A
  121. INTENAR    equ    $01C
  122. DMACON        equ    $096
  123.  
  124. SERPER        equ    $032
  125. SERDATR    equ    $018
  126. SERDAT        equ    $030
  127. vhposr        equ $006    
  128. vhposrl    equ $007 
  129.  
  130. bltcon0    equ $40 
  131. bltcon1    equ $42
  132. bltcpt        equ $48
  133. bltbpt        equ $4c
  134. bltapt        equ $50
  135. spr0ctl    equ $142
  136. spr1ctl    equ $14a
  137. spr2ctl    equ $152
  138. spr3ctl    equ $15a
  139. spr4ctl    equ $162
  140. spr5ctl    equ $16a
  141. spr6ctl    equ $172
  142. spr7ctl    equ $17a
  143. spr0pos    equ $140
  144. spr1pos    equ $148
  145. spr2pos    equ $150
  146. spr3pos    equ $158
  147. spr4pos    equ $160
  148. spr5pos    equ $168
  149. spr6pos    equ $170
  150. spr7pos    equ $178
  151. bltdpt         equ $54
  152. bltafwm    equ $44
  153. bltalwm    equ $46
  154. bltsize         equ $58
  155. bltcmod         equ $60
  156. bltbmod         equ $62
  157. bltamod         equ $64
  158. bltdmod         equ $66
  159. diwstart        equ $8e         ; Screen hardware registers.
  160. diwstop         equ $90
  161. ddfstart        equ $92
  162. ddfstop         equ $94
  163. bplcon0         equ $100
  164. bplcon1         equ $102
  165. col0            equ $180
  166. col1            equ $182
  167. col2        equ $184
  168. col3        equ $186
  169. col4        equ $188
  170. col5        equ $18a
  171. col6        equ $18c
  172. col7        equ $18e
  173. col8            equ $190
  174. col9            equ $192
  175. col10           equ $194
  176. col11           equ $196
  177. col12           equ $198
  178. col13           equ $19a
  179. dmacon        equ $96
  180. dmaconr        equ $002
  181. intenar        equ $01c
  182. intena        equ $09a
  183. intreq        equ $09c
  184. intreqr        equ $01e
  185. intreqrl    equ $01f
  186. bpl1pth         equ $e0
  187. bpl1ptl         equ $e2
  188. bpl2pth        equ $e4
  189. bpl2ptl        equ $e6
  190. bpl3pth        equ $e8
  191. bpl3ptl        equ $ea
  192. bpl4pth        equ $ec
  193. bpl4ptl        equ $ee
  194. bpl5pth        equ $f0
  195. bpl5ptl        equ $f2
  196. bpl6pth        equ $f4
  197. bpl6ptl        equ $f6
  198. bpl7pth        equ $f8
  199. bpl7ptl        equ $fa
  200. bpl8pth        equ $fc
  201. bpl8ptl        equ $fe
  202. spr0pth        equ $120
  203. spr0ptl        equ $122
  204. spr1pth        equ $124
  205. spr1ptl        equ $126
  206. spr2pth        equ $128
  207. spr2ptl        equ $12a
  208. spr3pth        equ $12c
  209. spr3ptl        equ $12e
  210. spr4pth        equ $130
  211. spr4ptl        equ $132
  212. spr5pth        equ $134
  213. spr5ptl        equ $136
  214. spr6pth        equ $138
  215. spr6ptl        equ $13a
  216. spr7pth        equ $13c
  217. spr7ptl        equ $13e
  218. adkcon        equ   $09E
  219.  
  220.  
  221. ; move.l #length,d0
  222. ; moveq.l #2,d1    ; chipmem
  223. ; move.l 4.w,a6
  224. ; jsr allocmem(a6) = -198
  225.  
  226. ; tst.l d0
  227. ; beq.s ohbugger
  228. ; move.l d0,memaddr
  229.  
  230.  
  231. ; move.l 4.w,a6
  232. ; move.l memaddr,a1
  233. ; move.l #size,d0
  234. ; jsr freemem(a6) =-210
  235.  
  236.  
  237. ** This waits for the blitter to finish before allowing program
  238. ** execution to continue.
  239.  
  240.  
  241.  include "ab3:source_4000/protsetupdecode"
  242.  
  243. SAVEREGS MACRO
  244.  movem.l d0-d7/a0-a6,-(a7)
  245.  ENDM
  246.  
  247. GETREGS MACRO
  248.  movem.l (a7)+,d0-d7/a0-a6
  249.  ENDM
  250.  
  251.  
  252. WB MACRO
  253. \@bf:
  254.  btst #6,dmaconr(a6)
  255.  bne.s \@bf
  256.  ENDM
  257.  
  258. WBa MACRO
  259. \@bf:
  260.  move.w #\2,$dff180
  261.  
  262.  btst #6,$bfe001
  263.  bne.s \@bf
  264. \@bz:
  265.  
  266.  move.w #$f0f,$dff180
  267.  
  268.  btst #6,$bfe001
  269.  beq.s \@bz
  270.  
  271.  ENDM
  272.  
  273. *Another version for when a6 <> dff000
  274.  
  275. WBSLOW MACRO
  276. \@bf:
  277.  btst #6,$dff000+dmaconr
  278.  bne.s \@bf
  279.  ENDM
  280.  
  281. WT MACRO
  282. \@bf:
  283.  btst #6,(a3)
  284.  bne.s \@bd
  285.  rts
  286. \@bd: 
  287.  btst #4,(a0)
  288.  beq.s \@bf
  289.  ENDM
  290.  
  291. WTNOT MACRO
  292. \@bf:
  293.  btst #6,(a3)
  294.  bne.s \@bd
  295.  rts
  296. \@bd: 
  297.  btst #4,(a0)
  298.  bne.s \@bf
  299.  ENDM
  300.  
  301. **
  302.  
  303.  include "ab3:source_4000/ProtectionProtection"
  304.  include "macros.i"
  305.  include "ab3:source_4000/defs.i"
  306.  
  307. wtclickk:
  308.  btst #6,$bfe001
  309.  bne.s wtclickk
  310.  
  311.  move.w (a0)+,mors
  312.  
  313. ;    FLASHER $0f0,$fff
  314.  
  315. ; PROTFCALC
  316. ; PROTGCALC
  317. ; PROTHCALC
  318. ; PROTICALC
  319. ; PROTKCALC
  320. ; PROTLCALC
  321. ; PROTMCALC
  322.  
  323.  
  324.  
  325.  move.l #$dff000,a6    ; NB V. IMPORTANT: A6=CUSTOM BASE
  326.  move.w intenar(a6),_storeint
  327.  and.w #$c000,_storeint
  328.  
  329.  move.w #13,SERPER(a6)    ;19200 baud, 8 bits, no parity
  330.  
  331.  
  332.  st GOURSEL
  333.  
  334.  move.l 4.w,a6
  335.  lea VBLANKInt(pc),a1
  336.  moveq #INTB_COPER,d0
  337.  jsr _LVOAddIntServer(a6)
  338.  
  339.     IFEQ CD32VER
  340.  move.l 4.w,a6
  341.  lea KEYInt(pc),a1
  342.  moveq #INTB_PORTS,d0
  343.  jsr _LVOAddIntServer(a6)
  344.     ENDC
  345.  
  346.  IFNE CD32VER
  347.  clr.b PLR1KEYS
  348.  clr.b PLR1PATH
  349.  clr.b PLR1MOUSE
  350.  st PLR1JOY
  351.  clr.b PLR2KEYS
  352.  clr.b PLR2PATH
  353.  clr.b PLR2MOUSE
  354.  st PLR2JOY
  355.  ELSE
  356.  st PLR1KEYS
  357.  clr.b PLR1PATH
  358.  clr.b PLR1MOUSE
  359.  clr.b PLR1JOY
  360.  st PLR2KEYS
  361.  clr.b PLR2PATH
  362.  clr.b PLR2MOUSE
  363.  clr.b PLR2JOY
  364.  ENDC
  365.  
  366.  PRSDO
  367.  
  368.  move.l #2,d1    
  369.  move.l #10240*2,d0
  370.  move.l 4.w,a6
  371.  jsr -198(a6)
  372.  move.l d0,TEXTSCRN
  373.  move.w d0,TSPTl
  374.  swap d0
  375.  move.w d0,TSPTh
  376.  
  377.  move.l #nullspr,d0
  378.  move.w d0,txs0l
  379.  move.w d0,txs1l
  380.  move.w d0,txs2l
  381.  move.w d0,txs3l
  382.  move.w d0,txs4l
  383.  move.w d0,txs5l
  384.  move.w d0,txs6l
  385.  move.w d0,txs7l
  386.  swap d0
  387.  move.w d0,txs0h
  388.  move.w d0,txs1h
  389.  move.w d0,txs2h
  390.  move.w d0,txs3h
  391.  move.w d0,txs4h
  392.  move.w d0,txs5h
  393.  move.w d0,txs6h
  394.  move.w d0,txs7h 
  395.  
  396.  move.l #MEMF_FAST,d1    
  397.  move.l #120000,d0
  398.  move.l 4.w,a6
  399.  jsr -198(a6)
  400.  move.l d0,LEVELDATA
  401.  
  402.  move.l #MEMF_FAST,d1    
  403.  move.l #2*320*256,d0
  404.  move.l 4.w,a6
  405.  jsr -198(a6)
  406.  move.l d0,FASTBUFFER
  407.  
  408.  jsr START
  409.  
  410.  rts
  411.  
  412. FASTBUFFER: dc.l 0
  413. _storeint
  414.     dc.w 0
  415.  
  416. * Load level into buffers.
  417.  clr.b doanything
  418.  clr.b dosounds
  419.  
  420. ; DRAW TEXT SCREEN
  421.  
  422. TWEENTEXT:
  423.  
  424.  move.l #LEVELTEXT,a0
  425.  move.w PLOPT,d0
  426.  muls #82*16,d0
  427.  add.l d0,a0
  428.  
  429.  move.w #14,d7
  430.  move.w #0,d0
  431. DOWNTEXT:
  432.  move.l TEXTSCRN,a1
  433.  jsr DRAWLINEOFTEXT
  434.  addq #1,d0
  435.  add.w #82,a0
  436.  dbra d7,DOWNTEXT
  437.  rts
  438.  
  439. FONTADDRS:
  440.  dc.l ENDFONT0,CHARWIDTHS0
  441.  dc.l ENDFONT1,CHARWIDTHS1
  442.  dc.l ENDFONT2,CHARWIDTHS2
  443.  
  444. ENDFONT0:
  445.  incbin "endfont0"
  446. CHARWIDTHS0:
  447.  incbin "charwidths0"
  448. ENDFONT1:
  449.  incbin "endfont1"
  450. CHARWIDTHS1:
  451.  incbin "charwidths1"
  452. ENDFONT2:
  453.  incbin "endfont2"
  454. CHARWIDTHS2:
  455.  incbin "charwidths2"
  456.  
  457.  even
  458.  
  459. DRAWLINEOFTEXT:
  460.  movem.l d0/a0/d7,-(a7)
  461.  
  462.  muls #80*16,d0
  463.  add.l d0,a1    ; screen pointer
  464.  
  465.  move.l #FONTADDRS,a3
  466.  moveq #0,d0
  467.  move.b (a0)+,d0
  468.  move.l (a3,d0.w*8),a2
  469.  move.l 4(a3,d0.w*8),a3
  470.  
  471.  moveq #0,d1    ; width counter:
  472.  move.w #79,d6
  473.  tst.b (a0)+
  474.  beq.s NOTCENTRED
  475.  moveq #-1,d5
  476.  move.l a0,a4
  477.  moveq #0,d2
  478.  moveq #0,d3
  479.  move.w #79,d0    ; number of chars
  480. .addup:
  481.  addq #1,d5
  482.  move.b (a4)+,d2
  483.  move.b -32(a3,d2.w),d4
  484.  add.w d4,d3
  485.  cmp.b #32,d2
  486.  beq.s .DONTPUTIN
  487.  move.w d5,d6
  488.  move.w d3,d1
  489. .DONTPUTIN:
  490.  dbra d0,.addup
  491.  asr.w #1,d1
  492.  neg.w d1
  493.  add.w #320,d1    ; horiz pos of start x
  494.  
  495. NOTCENTRED:
  496.  move.w d6,d7
  497. DOACHAR:
  498.  moveq #0,d2
  499.  move.b (a0)+,d2
  500.  sub.w #32,d2
  501.  moveq #0,d6
  502.  move.b (a3,d2.w),d6
  503.  asl.w #5,d2
  504.  lea (a2,d2.w),a4    ; char font
  505. val SET 0
  506.  REPT 16
  507.  move.w (a4)+,d0
  508.  bfins d0,val(a1){d1:d6}
  509. val SET val+80
  510.  ENDR
  511.  add.w d6,d1
  512.  dbra d7,DOACHAR
  513.  movem.l (a7)+,d0/a0/d7
  514.  rts 
  515.  
  516.  
  517. CLRTWEENSCRN:
  518.  move.l TEXTSCRN,a0
  519.  move.w #(10240/16)-1,d0
  520.  move.l #$0,d1
  521. .lll
  522.  move.l d1,(a0)+
  523.  move.l d1,(a0)+
  524.  move.l d1,(a0)+
  525.  move.l d1,(a0)+
  526.  move.l d1,(a0)+
  527.  move.l d1,(a0)+
  528.  move.l d1,(a0)+
  529.  move.l d1,(a0)+
  530.  dbra d0,.lll
  531.  rts
  532.  
  533. PLAYTHEGAME:
  534.  
  535.  move.w #0,TXTCOLL
  536.  
  537.  bsr CLRTWEENSCRN
  538.  
  539.  cmp.b #'n',mors
  540.  bne.s .notext
  541.  bsr TWEENTEXT
  542. .notext
  543.  
  544. ;charlie 
  545.  move.l #TEXTCOP,$dff080
  546.  
  547.  move.w #$10,d0
  548.  move.w #7,d1
  549.  
  550. .fdup
  551.  move.w d0,TXTCOLL
  552.  add.w #$121,d0
  553. .wtframe:
  554.  btst #5,$dff000+intreqrl
  555.  beq.s .wtframe
  556.  move.w #$0020,$dff000+intreq
  557.  dbra d1,.fdup
  558.  
  559.  jsr INITCOPPERSCRN
  560.  
  561. ; Get level memory.
  562.  
  563.  move.l #1,d1
  564.  move.l #50000,d0
  565.  move.l 4.w,a6
  566.  jsr -198(a6)
  567.  move.l d0,LEVELGRAPHICS
  568.  
  569.  move.l #1,d1
  570.  move.l #40000,d0
  571.  move.l 4.w,a6
  572.  jsr -198(a6)
  573.  move.l d0,LEVELCLIPS
  574.  
  575.  move.l #$dff000,a6
  576.  jsr SETPLAYERS
  577.  
  578. ; move.l #LEVELDATAD,LEVELDATA
  579. ; move.l #LEVELGRAPHICSD,LEVELGRAPHICS
  580. ; move.l #LEVELCLIPSD,LEVELCLIPS
  581.  
  582. ; bra noload
  583.  
  584. *********************************
  585.  
  586.  
  587.  move.l doslib,a6
  588.  move.l #LLname,d1
  589.  move.l #1005,d2
  590.  jsr -30(a6)
  591.  move.l d0,LLhandle
  592.  
  593.  move.l doslib,a6
  594.  move.l d0,d1
  595.  move.l #LINKS,d2
  596.  move.l #10000,d3
  597.  jsr -42(a6)
  598.  
  599.  move.l doslib,a6
  600.  move.l LLhandle,d1
  601.  jsr -36(a6)
  602.  
  603.  ********************************
  604.  
  605.  move.l doslib,a6
  606.  move.l #LLFname,d1
  607.  move.l #1005,d2
  608.  jsr -30(a6)
  609.  move.l d0,LLhandle
  610.  
  611.  move.l doslib,a6
  612.  move.l d0,d1
  613.  move.l #FLYLINKS,d2
  614.  move.l #10000,d3
  615.  jsr -42(a6)
  616.  
  617.  move.l doslib,a6
  618.  move.l LLhandle,d1
  619.  jsr -36(a6)
  620.  
  621.  ************************
  622.  ********
  623.  
  624.  
  625.  move.l doslib,a6
  626.  move.l #LDname,d1
  627.  move.l #1005,d2
  628.  jsr -30(a6)
  629.  move.l d0,LDhandle
  630.  
  631.  move.l doslib,a6
  632.  move.l d0,d1
  633.  move.l LEVELCLIPS,d2
  634.  move.l #40000,d3
  635.  jsr -42(a6)
  636.  
  637.  move.l doslib,a6
  638.  move.l LDhandle,d1
  639.  jsr -36(a6)
  640.  
  641. *************************************
  642.     move.l    LEVELCLIPS,d0
  643.     moveq    #0,d1
  644.     move.l LEVELDATA,a0
  645.     lea    WorkSpace,a1
  646.     lea    $0,a2
  647.     jsr    unLHA
  648. *************************************
  649.  
  650. ********
  651.  
  652.  move.l doslib,a6
  653.  move.l #LGname,d1
  654.  move.l #1005,d2
  655.  jsr -30(a6)
  656.  move.l d0,LGhandle
  657.  
  658.  move.l doslib,a6
  659.  move.l d0,d1
  660.  move.l LEVELCLIPS,d2
  661.  move.l #40000,d3
  662.  jsr -42(a6)
  663.  
  664.  move.l doslib,a6
  665.  move.l LGhandle,d1
  666.  jsr -36(a6)
  667.  
  668. *************************************
  669.     move.l    LEVELCLIPS,d0
  670.     moveq    #0,d1
  671.     move.l LEVELGRAPHICS,a0
  672.     lea    WorkSpace,a1
  673.     lea    $0,a2
  674.     jsr    unLHA
  675. *************************************
  676.  
  677.  
  678. ********
  679.  
  680.  move.l doslib,a6
  681.  move.l #LCname,d1
  682.  move.l #1005,d2
  683.  jsr -30(a6)
  684.  move.l d0,LChandle
  685.  
  686.  move.l doslib,a6
  687.  move.l d0,d1
  688.  move.l #WorkSpace+16384,d2
  689.  move.l #16000,d3
  690.  jsr -42(a6)
  691.  
  692.  move.l doslib,a6
  693.  move.l LChandle,d1
  694.  jsr -36(a6)
  695.  
  696. *************************************
  697.     move.l    #WorkSpace+16384,d0
  698.     moveq    #0,d1
  699.     move.l LEVELCLIPS,a0
  700.     lea    WorkSpace,a1
  701.     lea    $0,a2
  702.     jsr    unLHA
  703. *************************************
  704.  
  705.  
  706. *******
  707.  
  708. noload:
  709.  
  710. ********
  711.  
  712. ; move.l doslib,a6
  713. ; move.l #Prefsname,d1
  714. ; move.l #1005,d2
  715. ; jsr -30(a6)
  716. ; move.l d0,Prefshandle
  717.  
  718. ; move.l doslib,a6
  719. ; move.l d0,d1
  720. ; move.l #Prefsfile,d2
  721. ; move.l #50,d3
  722. ; jsr -42(a6)
  723.  
  724. ; move.l doslib,a6
  725. ; move.l Prefshandle,d1
  726. ; jsr -36(a6)
  727.  
  728. *******
  729.  
  730.  IFNE CD32VER
  731.  move.l doslib,a6
  732.  move.l #115,d1
  733.  jsr -198(a6)
  734.  ENDC
  735.  
  736.  
  737. ; move.l doslib,d0
  738. ; move.l d0,a1
  739. ; move.l 4.w,a6
  740. ; jsr CloseLib(a6)
  741.  
  742.  move.l #$dff000,a6
  743.  
  744. charlie:
  745. ; jmp  ENDGAMESCROLL
  746.  
  747.     move.w #$87c0,dmacon(a6)
  748.  
  749.     move.w    #%1000000000100000,dmacon(a6)
  750.  
  751. ; move.w intenar(a6),saveinters
  752.     
  753.     move.w #%00101111,intena(a6)
  754.  
  755.     move.w #255,adkcon(a6)
  756.  
  757.  
  758. *** Put myself in supervisor mode
  759.  
  760.  bra blag
  761. ; move.l $6c,d0
  762. ; move.l #blag,$6c
  763. ; move.w #$8010,intreq(a6)
  764.  
  765.  rts
  766.  
  767. saveit: ds.l 10
  768. doslibname: dc.b 'dos.library',0
  769.  even
  770. doslib: dc.l 0
  771.  
  772. mors: dc.w 0
  773.  
  774. LDname: dc.b 'ab3:levels/level_'
  775. LEVA:
  776.  dc.b 'a/twolev.bin',0
  777.  even
  778. LDhandle: dc.l 0
  779. LGname: dc.b 'ab3:levels/level_'
  780. LEVB:
  781.  dc.b 'a/twolev.graph.bin',0
  782.  even
  783. LGhandle: dc.l 0
  784. LCname: dc.b 'ab3:levels/level_'
  785. LEVC:
  786.  dc.b 'a/twolev.clips',0
  787.  even
  788. LChandle: dc.l 0
  789. LLname: dc.b 'ab3:levels/level_'
  790. LEVD:
  791.  dc.b 'a/twolev.map',0
  792.  even
  793. LLFname: dc.b 'ab3:levels/level_'
  794. LEVE:
  795.  dc.b 'a/twolev.flymap',0
  796.  even
  797. LLhandle: dc.l 0
  798.  
  799.     cnop    0,4
  800.  
  801. Prefsname: dc.b 'ram:prefs',0
  802.  even
  803. Prefshandle: dc.l 0
  804.  
  805. Prefsfile:
  806.  dc.b 'k4nx'
  807.  ds.b 50
  808.  
  809.  even
  810.  
  811.  cnop 0,4
  812.  
  813. VBLANKInt
  814.  dc.l 0,0
  815.  dc.b NT_INTERRUPT,9
  816.  dc.l Prefsname
  817.  dc.l 0
  818.  dc.l Chan0inter
  819.  
  820.  
  821. KEYInt
  822.  dc.l 0,0
  823.  dc.b NT_INTERRUPT,127
  824.  dc.l Prefsname
  825.  dc.l 0
  826.  dc.l key_interrupt
  827.  
  828.  
  829. blag:
  830. ; move.w #$10,intreq(a6)
  831. ; move.l d0,$6c
  832. ; move.w #$7fff,intena(a6)
  833.  
  834. ; move.w #$20,$dff1dc
  835.  
  836. ; move.l 4.w,a6
  837. ; lea VBLANKInt(pc),a1
  838. ; moveq #INTB_COPER,d0
  839. ; jsr _LVOAddIntServer(a6)
  840.  
  841. ****************************
  842. * Initialize level
  843. ****************************
  844. * Poke all clip offsets into
  845. * correct bit of level data.
  846. ****************************
  847.  move.l LEVELGRAPHICS,a0
  848.  move.l 12(a0),a1
  849.  add.l a0,a1
  850.  move.l a1,ZoneGraphAdds
  851.  move.l (a0),a1
  852.  add.l a0,a1
  853.  move.l a1,DoorData
  854.  move.l 4(a0),a1
  855.  add.l a0,a1
  856.  move.l a1,LiftData
  857.  move.l 8(a0),a1
  858.  add.l a0,a1
  859.  move.l a1,SwitchData
  860.  adda.w #16,a0
  861.  move.l a0,ZoneAdds
  862.  
  863.  move.l LEVELDATA,a4
  864.  lea 160*10(a4),a1
  865.  
  866.  lea 54(a1),a2
  867.  move.l a2,CPtPos
  868.  move.w 12(a1),NumCPts
  869.  move.w 14(a1),NumLevPts
  870.  
  871.  move.l 16+6(a1),a2
  872.  add.l a4,a2
  873.  move.l a2,Points
  874.  move.w 8+6(a1),d0
  875.  lea 4(a2,d0.w*4),a2
  876.  move.l a2,PointBrights
  877.  move.w 16(a1),d0
  878.  addq #1,d0
  879.  muls #80,d0
  880.  add.l d0,a2
  881.  move.l a2,ZoneBorderPts
  882.  
  883.  move.l 20+6(a1),a2
  884.  add.l a4,a2
  885.  move.l a2,FloorLines
  886.  move.l 24+6(a1),a2
  887.  add.l a4,a2
  888.  move.l a2,ObjectData
  889. *****************************************
  890. * Just for charles
  891.  
  892. ; move.w #$6060,6(a2)
  893. ; move.l #$d0000,8(a2)
  894. ; sub.w #40,4(a2)
  895. ; move.w #45*256+45,14(a2)
  896. ****************************************
  897.  move.l 28+6(a1),a2
  898.  add.l a4,a2
  899.  move.l a2,PlayerShotData
  900.  move.l 32+6(a1),a2
  901.  add.l a4,a2
  902.  move.l a2,NastyShotData
  903.  
  904.  add.l #64*20,a2
  905.  move.l a2,OtherNastyData
  906.  
  907.  move.l 36+6(a1),a2
  908.  add.l a4,a2
  909.  move.l a2,ObjectPoints  
  910.  move.l 40+6(a1),a2
  911.  add.l a4,a2
  912.  move.l a2,PLR1_Obj
  913.  move.l 44+6(a1),a2
  914.  add.l a4,a2
  915.  move.l a2,PLR2_Obj
  916.  move.w 14+6(a1),NumObjectPoints
  917.  
  918. ; bra noclips
  919.   
  920.  move.l LEVELCLIPS,a2
  921.  moveq #0,d0
  922.  move.w 10+6(a1),d7    ;numzones
  923.  move.w d7,NUMZONES
  924. assignclips:
  925.  move.l (a0)+,a3
  926.  add.l a4,a3    ; pointer to a zone
  927.  adda.w #ToListOfGraph,a3 ; pointer to zonelist
  928. dowholezone:
  929.  tst.w (a3)
  930.  blt.s nomorethiszone
  931.  tst.w 2(a3)
  932.  blt.s thisonenull
  933.  
  934.  move.l d0,d1
  935.  asr.l #1,d1
  936.  move.w d1,2(a3)
  937.  
  938. findnextclip:
  939.  cmp.w #-2,(a2,d0.l)
  940.  beq.s foundnextclip
  941.  addq.l #2,d0
  942.  bra.s findnextclip
  943. foundnextclip
  944.  addq.l #2,d0
  945.  
  946. thisonenull:
  947.  addq #8,a3 
  948.  bra.s dowholezone
  949. nomorethiszone:
  950.  dbra d7,assignclips
  951.  
  952.  lea (a2,d0.l),a2
  953.  move.l a2,CONNECT_TABLE
  954.  
  955. noclips:
  956.  
  957. * Put in addresses of glowything
  958.  
  959.  
  960. ************************************
  961.  
  962. ; cmp.b #'k',Prefsfile
  963. ; bne.s nkb
  964.  
  965. ;nkb:
  966. ; cmp.b #'m',Prefsfile
  967. ; bne.s nmc
  968. ; clr.b PLR1KEYS
  969. ; clr.b PLR1PATH
  970. ; st PLR1MOUSE
  971. ; clr.b PLR1JOY
  972. ;nmc:
  973. ; cmp.b #'j',Prefsfile
  974. ; bne.s njc
  975. ; clr.b PLR1KEYS
  976. ; clr.b PLR1PATH
  977. ; clr.b PLR1MOUSE
  978. ; st PLR1JOY
  979. ;njc:
  980.  
  981.  clr.b PLR1_StoodInTop
  982.  move.l #playerheight,PLR1s_height
  983.  
  984.  move.l #empty,pos1LEFT
  985.  move.l #empty,pos2LEFT
  986.  move.l #empty,pos1RIGHT
  987.  move.l #empty,pos2RIGHT
  988.  move.l #empty,pos0LEFT
  989.  move.l #empty,pos3LEFT
  990.  move.l #empty,pos0RIGHT
  991.  move.l #empty,pos3RIGHT
  992.  move.l #emptyend,Samp0endLEFT
  993.  move.l #emptyend,Samp1endLEFT
  994.  move.l #emptyend,Samp0endRIGHT
  995.  move.l #emptyend,Samp1endRIGHT
  996.  move.l #emptyend,Samp2endLEFT
  997.  move.l #emptyend,Samp3endLEFT
  998.  move.l #emptyend,Samp2endRIGHT
  999.  move.l #emptyend,Samp3endRIGHT
  1000.  
  1001.  
  1002.  move.l #nullline,d0
  1003.  move.w d0,n1l
  1004.  swap d0
  1005.  move.w d0,n1h
  1006.  
  1007.  move.l Panel,d0
  1008.  move.w d0,p1l
  1009.  swap d0
  1010.  move.w d0,p1h
  1011.  swap d0
  1012.  add.l #40,d0
  1013.  move.w d0,p2l
  1014.  swap d0
  1015.  move.w d0,p2h
  1016.  swap d0
  1017.  add.l #40,d0
  1018.  move.w d0,p3l
  1019.  swap d0
  1020.  move.w d0,p3h
  1021.  swap d0
  1022.  add.l #40,d0
  1023.  move.w d0,p4l
  1024.  swap d0
  1025.  move.w d0,p4h
  1026.  swap d0
  1027.  add.l #40,d0
  1028.  move.w d0,p5l
  1029.  swap d0
  1030.  move.w d0,p5h
  1031.  swap d0
  1032.  add.l #40,d0
  1033.  move.w d0,p6l
  1034.  swap d0
  1035.  move.w d0,p6h
  1036.  swap d0
  1037.  add.l #40,d0
  1038.  move.w d0,p7l
  1039.  swap d0
  1040.  move.w d0,p7h
  1041.  swap d0
  1042.  add.l #40,d0
  1043.  move.w d0,p8l
  1044.  swap d0
  1045.  move.w d0,p8h
  1046.  
  1047. *******************************
  1048. * TIMER SCREEN SETUP
  1049. ; move.l #TimerScr,d0
  1050. ; move.w d0,p1l
  1051. ; swap d0
  1052. ; move.w d0,p1h
  1053. ; move.w #$1201,Panelcon
  1054.  
  1055.  move.l #borders,d0
  1056.  move.w d0,s0l
  1057.  swap d0
  1058.  move.w d0,s0h
  1059.  move.l #borders+2592,d0
  1060.  move.w d0,s1l
  1061.  swap d0
  1062.  move.w d0,s1h
  1063.  move.l #borders+2592*2,d0
  1064.  move.w d0,s2l
  1065.  swap d0
  1066.  move.w d0,s2h
  1067.  move.l #borders+2592*3,d0
  1068.  move.w d0,s3l
  1069.  swap d0
  1070.  move.w d0,s3h
  1071.  
  1072.  move.l #nullspr,d0
  1073.  move.w d0,s0l
  1074.  move.w d0,s1l
  1075.  move.w d0,s2l
  1076.  move.w d0,s3l
  1077.  
  1078.  move.w d0,s4l
  1079.  move.w d0,s5l
  1080.  move.w d0,s6l
  1081.  move.w d0,s7l
  1082.  swap d0
  1083.  
  1084.  move.w d0,s0h
  1085.  move.w d0,s1h
  1086.  move.w d0,s2h
  1087.  move.w d0,s3h
  1088.  
  1089.  move.w d0,s4h
  1090.  move.w d0,s5h
  1091.  move.w d0,s6h
  1092.  move.w d0,s7h 
  1093.  
  1094.  
  1095.  move.w #52*256+64,borders
  1096.  move.w #212*256+0,borders+8
  1097.  move.w #52*256+64,borders+2592
  1098.  move.w #212*256+128,borders+8+2592
  1099.  move.w #52*256+192,borders+2592*2
  1100.  move.w #212*256+0,borders+8+2592*2
  1101.  move.w #52*256+192,borders+2592*3
  1102.  move.w #212*256+128,borders+8+2592*3
  1103.  
  1104.  move.l #FacePlace,d0
  1105.  move.w d0,f1l
  1106.  swap d0
  1107.  move.w d0,f1h
  1108.  move.l #FacePlace+32*24,d0
  1109.  move.w d0,f2l
  1110.  swap d0
  1111.  move.w d0,f2h
  1112.  move.l #FacePlace+32*24*2,d0
  1113.  move.w d0,f3l
  1114.  swap d0
  1115.  move.w d0,f3h
  1116.  move.l #FacePlace+32*24*3,d0
  1117.  move.w d0,f4l
  1118.  swap d0
  1119.  move.w d0,f4h
  1120.  move.l #FacePlace+32*24*4,d0
  1121.  move.w d0,f5l
  1122.  swap d0
  1123.  move.w d0,f5h
  1124.   
  1125.  
  1126.  move.l #bigfield,d0
  1127.  move.w d0,ocl
  1128.  swap d0
  1129.  move.w d0,och
  1130.  
  1131.  bset.b #1,$bfe001
  1132.  
  1133. ; jmp stuff
  1134. ;endstuff:
  1135.  
  1136.  move.w #$00ff,$dff09e
  1137.  
  1138. ; move.l #Blurbfield,$dff080
  1139.  
  1140.  move.w #0,d0
  1141.  
  1142.  move.l #scrn,d0
  1143.  move.w d0,pl1l
  1144.  swap d0
  1145.  move.w d0,pl1h
  1146.  
  1147.  move.l #scrn+10240,d0
  1148.  move.w d0,pl2l
  1149.  swap d0
  1150.  move.w d0,pl2h
  1151.  
  1152.  move.l #scrn+10240*2,d0
  1153.  move.w d0,pl3l
  1154.  swap d0
  1155.  move.w d0,pl3h
  1156.  
  1157.  move.l #scrn+10240*3,d0
  1158.  move.w d0,pl4l
  1159.  swap d0
  1160.  move.w d0,pl4h
  1161.  
  1162.  move.l #scrn+10240*4,d0
  1163.  move.w d0,pl5l
  1164.  swap d0
  1165.  move.w d0,pl5h
  1166.  
  1167.  move.l #scrn+10240*5,d0
  1168.  move.w d0,pl6l
  1169.  swap d0
  1170.  move.w d0,pl6h
  1171.  
  1172.  move.l #scrn+10240*6,d0
  1173.  move.w d0,pl7l
  1174.  swap d0
  1175.  move.w d0,pl7h
  1176.  
  1177.  move.l #scrn+10240*7,d0
  1178.  move.w d0,pl8l
  1179.  swap d0
  1180.  move.w d0,pl8h
  1181.  
  1182.  
  1183. ****************************
  1184.  jsr INITPLAYER
  1185. ; bsr initobjpos
  1186. ****************************
  1187.  
  1188.  
  1189.  move.l #$dff000,a6
  1190.  
  1191.  move.l #null,$dff0a0
  1192.  move.w #100,$dff0a4
  1193.  move.w #443,$dff0a6
  1194.  move.w #63,$dff0a8
  1195.  
  1196.  move.l #null2,$dff0b0
  1197.  move.w #100,$dff0b4
  1198.  move.w #443,$dff0b6
  1199.  move.w #63,$dff0b8
  1200.  
  1201.  move.l #null4,$dff0c0
  1202.  move.w #100,$dff0c4
  1203.  move.w #443,$dff0c6
  1204.  move.w #63,$dff0c8
  1205.  
  1206.  move.l #null3,$dff0d0
  1207.  move.w #100,$dff0d4
  1208.  move.w #443,$dff0d6
  1209.  move.w #63,$dff0d8
  1210.  
  1211.  move.l #tab,a1
  1212.  move.w #64,d7
  1213.  move.w #0,d6
  1214. outerlop
  1215.  move.l #pretab,a0
  1216.  move.w #255,d5
  1217. scaledownlop:
  1218.  move.b (a0)+,d0
  1219.  ext.w d0
  1220.  ext.l d0
  1221.  muls d6,d0
  1222.  asr.l #6,d0
  1223.  move.b d0,(a1)+
  1224.  dbra d5,scaledownlop
  1225.  addq #1,d6
  1226.  dbra d7,outerlop
  1227.  
  1228.  move.l #$dff000,a6
  1229.  
  1230.  move.w #$c018,intena(a6)
  1231.  
  1232.  move.w #$f,dmacon(a6)
  1233.  move.w #$820f,dmacon(a6)
  1234.  
  1235. ; bsr protinit
  1236.  
  1237.  
  1238. ; move.w #$20,$1dc(a6)
  1239.  
  1240.  move.w #$0,$dff034
  1241.  move.w #0,Conditions
  1242.  
  1243.  cmp.b #'n',mors
  1244.  beq.s .nokeys
  1245.  move.w #%111111111111,Conditions
  1246. .nokeys:
  1247.  
  1248.  move.l #KeyMap,a5
  1249.  clr.b $45(a5)
  1250.  
  1251.  move.l #ingame,mt_data
  1252.  clr.b UseAllChannels
  1253.  
  1254. ; cmp.b #'b',Prefsfile+3
  1255. ; bne.s .noback
  1256. ; jsr mt_init
  1257. ;.noback:
  1258. ;
  1259. ; clr.b CHANNELDATA
  1260. ; clr.b CHANNELDATA+8
  1261. ; clr.b CHANNELDATA+16
  1262. ; clr.b CHANNELDATA+24
  1263. ;
  1264. ; cmp.b #'b',Prefsfile+3
  1265. ; bne.s noreserve
  1266. ;
  1267. ; st CHANNELDATA
  1268. ; st CHANNELDATA+8
  1269. ; st CHANNELDATA+16
  1270. ; st CHANNELDATA+24
  1271. ;noreserve: 
  1272.  
  1273. ; st CHANNELDATA
  1274. ; st CHANNELDATA+8
  1275.  
  1276.  move.l SampleList+6*8,pos0LEFT
  1277.  move.l SampleList+6*8+4,Samp0endLEFT
  1278.  move.l #playerheight,PLR1s_targheight
  1279.  move.l #playerheight,PLR1s_height
  1280.  move.l #playerheight,PLR2s_targheight
  1281.  move.l #playerheight,PLR2s_height
  1282.  
  1283. ; cmp.b #'n',mors
  1284. ; beq.s nohandshake
  1285. ;
  1286. ; move.b #%11011000,$bfd200
  1287. ; move.b #%00010000,$bfd000
  1288. ;waitloop:
  1289. ; btst.b #4,$bfd000
  1290. ; bne.s waitloop
  1291. ; move.b #%11000000,$bfd200
  1292.  
  1293. ;wtmouse:
  1294. ; btst #6,$bfe001
  1295. ; bne.s wtmouse
  1296.  
  1297. ;nohandshake:
  1298.  
  1299. ; jmp end
  1300.  
  1301. ; move.l COPSCRN1,drawpt
  1302. ; move.l COPSCRN2,olddrawpt
  1303.  
  1304.  jsr CLEARKEYBOARD
  1305. ; jsr MAKEBACKROUT
  1306.  
  1307.  clr.b MASTERQUITTING
  1308.  
  1309.  cmp.b #'n',mors
  1310.  seq SLAVEQUITTING
  1311.  
  1312.  move.w #127,PLR2_energy
  1313.  move.w #200,PLAYERONEHEALTH
  1314.  
  1315. ; move.l #ANOTHERSUP,$80
  1316. ; trap #0
  1317. ; rts
  1318. ;
  1319. ;ANOTHERSUP:
  1320.  
  1321.  move.l $4.w,a6
  1322.  jsr _LVOSuperState(a6)
  1323.  move.l d0,SSTACK
  1324.  
  1325.  CACHE_FREEZE_OFF d2
  1326.  
  1327. ; charlie
  1328. ; DATA_CACHE_ON d2
  1329.  
  1330.  DataCacheOn
  1331.  
  1332.  move.l $4.w,a6
  1333.  move.l SSTACK,d0
  1334.  jsr _LVOUserState(a6)
  1335.  
  1336.  move.l #0,hitcol
  1337.  
  1338.  cmp.b #'n',mors
  1339.  bne.s NOCLTXT
  1340.  
  1341.  move.b #0,lastpressed
  1342. .wtpress
  1343.  btst #6,$bfe001
  1344.  beq.s CLOSETXT
  1345.  btst #7,$bfe001
  1346.  beq.s CLOSETXT
  1347.  tst.b lastpressed
  1348.  beq.s .wtpress
  1349.  
  1350. CLOSETXT:
  1351.  
  1352.  move.w #$8f8,d0
  1353.  move.w #7,d1
  1354.  
  1355. .fdup
  1356.  move.w d0,TXTCOLL
  1357.  sub.w #$121,d0
  1358. .wtframe:
  1359.  btst #5,$dff000+intreqrl
  1360.  beq.s .wtframe
  1361.  move.w #$0020,$dff000+intreq
  1362.  dbra d1,.fdup
  1363.  
  1364.  move.w #0,TXTCOLL
  1365.  
  1366. NOCLTXT:
  1367.  
  1368.  
  1369.  
  1370.     move.l    4.w,a6
  1371.     jsr    _LVOForbid(a6)
  1372. ;    jsr    _LVODisable(a6)
  1373.  
  1374.  
  1375. ;    move.w    #%0111111111111111,intena+$dff000
  1376. ;    move.w    #%1000000011111111,intena+$dff000
  1377.  
  1378.  
  1379. ;charlie 
  1380.  move.l #PALETTEBIT,$dff084
  1381.  move.l #bigfield,$dff080    ; Point the copper at our copperlist.
  1382.  
  1383.  
  1384.  clr.b PLR1_Ducked
  1385.  clr.b PLR2_Ducked
  1386.  clr.b p1_ducked
  1387.  clr.b p2_ducked
  1388.  
  1389. ********************************************
  1390.  
  1391. ;    jmp docredits
  1392.  
  1393. ********************************************
  1394.  
  1395.  
  1396.  st doanything
  1397.  st dosounds
  1398.  
  1399.  jsr CLRNASTYMEM
  1400.  
  1401.  move.l #COMPACTMAP,a0
  1402.  move.l a0,LASTZONE
  1403.  move.w #255,d0
  1404. .clrmap
  1405.  move.l #0,(a0)+
  1406.  dbra d0,.clrmap
  1407.  
  1408.  move.l #COMPACTMAP,a0
  1409.  move.l #BIGMAP,a1
  1410.  
  1411.  bra NOALLWALLS
  1412.  
  1413.  move.l ZoneGraphAdds,a2
  1414. DOALLWALLS:
  1415.  move.l (a2),d0
  1416.  beq.s nomorezones
  1417.  move.l d0,a3
  1418.  
  1419.  addq #8,a2
  1420.  
  1421.  add.l LEVELGRAPHICS,a3
  1422.  addq #2,a3
  1423.  move.l a1,a4
  1424.  
  1425. ; DOLOWERROOM
  1426.  
  1427. innerwalls:
  1428.  move.b (a3),d1
  1429.  move.b 1(a3),d0
  1430.  bne doneinner
  1431.  
  1432.  tst.b d1
  1433.  blt noid
  1434.  
  1435.  move.b d1,d3
  1436.  and.w #15,d1
  1437.  
  1438.  moveq #0,d0
  1439.  move.w d1,d2
  1440.  add.w d1,d1
  1441.  add.w d2,d1
  1442.  addq #1,d1
  1443.  bset d1,d0
  1444.  btst #4,d3
  1445.  beq.s .nodoor
  1446.  addq #1,d1
  1447.  bset d1,d0
  1448. .nodoor
  1449.  
  1450.  or.l d0,(a0)
  1451.  
  1452.  move.w 2(a3),(a4)
  1453.  move.w 4(a3),2(a4)
  1454.  
  1455. noid:
  1456.  
  1457.  add.w #30,a3
  1458.  addq #4,a4
  1459.  
  1460.  bra innerwalls
  1461.  
  1462. doneinner:
  1463.  
  1464.  add.w #40,a1
  1465.  addq #4,a0
  1466.  
  1467.  bra DOALLWALLS
  1468. nomorezones:
  1469.  
  1470. NOALLWALLS
  1471.  
  1472.  move.w #96,MIDDLEX
  1473.  move.w #192,RIGHTX
  1474.  move.w #160,BOTTOMY
  1475.  move.w #80,TOTHEMIDDLE
  1476.  clr.b FULLSCR
  1477.  
  1478.  st PLAYERONEGUNS+1
  1479.  
  1480. lop:
  1481.  
  1482.  move.b FULLSCRTEMP,d0
  1483.  move.b FULLSCR,d1
  1484.  eor.b d1,d0
  1485.  beq.s .notswapscr2
  1486.  
  1487.  move.b FULLSCRTEMP,FULLSCR
  1488.  beq.s .notswapscr3
  1489.  
  1490.  move.w #144,MIDDLEX
  1491.  move.w #288,RIGHTX
  1492.  move.w #240,BOTTOMY
  1493.  move.w #120,TOTHEMIDDLE
  1494.  move.l SCRNSHOWPT,a0
  1495.  jsr WIPEDISPLAY
  1496.  move.l SCRNDRAWPT,a0
  1497.  jsr WIPEDISPLAY
  1498.  
  1499.  bra.s .notswapscr2
  1500.  
  1501. .notswapscr3:
  1502.  move.w #96,MIDDLEX
  1503.  move.w #192,RIGHTX
  1504.  move.w #160,BOTTOMY
  1505.  move.w #80,TOTHEMIDDLE
  1506.  move.l SCRNSHOWPT,a0
  1507.  jsr WIPEDISPLAY
  1508.  move.l SCRNDRAWPT,a0
  1509.  jsr WIPEDISPLAY
  1510. .notswapscr2:
  1511.  
  1512.  
  1513.  btst #6,$bfe001
  1514. ;charlie bne.b .nocop
  1515.  
  1516. ;charlie move.l #bigfield,$dff080    ; Point the copper at our copperlist.
  1517.  
  1518. .nocop
  1519.  
  1520.  move.l #KeyMap,a5
  1521.  
  1522.  cmp.b #'n',mors
  1523.  bne .nopause
  1524.  tst.b $19(a5)
  1525.  beq.s .nopause
  1526.  clr.b doanything
  1527.  
  1528. .waitrel:
  1529.  
  1530.  tst.b PLR1JOY
  1531.  beq.s .NOJOY
  1532.  jsr _ReadJoy1
  1533. .NOJOY
  1534.  
  1535.  tst.b $19(a5)
  1536.  bne.s .waitrel
  1537.  
  1538.  bsr PAUSEOPTS
  1539.  
  1540.  
  1541.  st doanything
  1542. .nopause: 
  1543.  
  1544.  move.l hitcol,d0
  1545.  move.l d0,d1
  1546.  add.l #PALETTEBIT,d1
  1547.  tst.l d0
  1548.  beq.s nofadedownhc
  1549.  sub.l #2116,d0
  1550.  move.l d0,hitcol
  1551. nofadedownhc:
  1552.  
  1553.  move.l d1,a0
  1554.  move.l #PALETTESPACE,a1
  1555.  move.l #(2116/4)-2,d0
  1556. putinpal:
  1557.  move.l (a0)+,(a1)+
  1558.  dbra d0,putinpal
  1559.  
  1560.  st READCONTROLS
  1561.  move.l #$dff000,a6
  1562.  
  1563.  
  1564.  cmp.b #'n',mors
  1565.  beq .nopause
  1566.  
  1567.  move.b SLAVEPAUSE,d0
  1568.  or.b MASTERPAUSE,d0
  1569.  beq.s .nopause
  1570.  clr.b doanything
  1571.  
  1572.  move.l #KeyMap,a5
  1573. .waitrel:
  1574.  
  1575.  
  1576.  cmp.b #'s',mors
  1577.  beq.s .RE2
  1578.  tst.b PLR1JOY
  1579.  beq.s .NOJOY
  1580.  jsr _ReadJoy1
  1581.  bra .RE1
  1582. .RE2:
  1583.  tst.b PLR2JOY
  1584.  beq.s .NOJOY
  1585.  jsr _ReadJoy2
  1586. .RE1
  1587. .NOJOY:
  1588.  tst.b $19(a5)
  1589.  bne.s .waitrel
  1590.  
  1591.  bsr PAUSEOPTS
  1592.  
  1593.  cmp.b #'m',mors
  1594.  bne.s .slavelast
  1595.  Jsr SENDFIRST
  1596.  bra .masfirst
  1597. .slavelast
  1598.  Jsr RECFIRST
  1599. .masfirst:
  1600.  clr.b SLAVEPAUSE
  1601.  clr.b MASTERPAUSE
  1602.  st doanything
  1603.  
  1604. .nopause: 
  1605.  
  1606.  
  1607.  
  1608.  move.l drawpt,d0
  1609.  move.l olddrawpt,drawpt
  1610.  move.l d0,olddrawpt
  1611.  
  1612.  move.l SCRNDRAWPT,d0
  1613.  move.l SCRNSHOWPT,SCRNDRAWPT
  1614.  move.l d0,SCRNSHOWPT
  1615.  
  1616.  
  1617.  
  1618.  
  1619. ; move.l d0,$dff084    
  1620.  move.l drawpt,a3
  1621. ; move.l COPSCRNBUFF,a3
  1622.  adda.w #10,a3
  1623.  move.l a3,frompt
  1624.  add.l #104*4*40,a3
  1625.  move.l a3,midpt
  1626.  
  1627.  cmp.b #'s',mors
  1628.  beq.s nowaitslave
  1629.  
  1630. waitfortop:
  1631.  
  1632.  btst.b #0,intreqrl(a6)
  1633.  beq.b waitfortop
  1634.  
  1635.  move.w #$1,intreq(a6)
  1636.  move.l #PLR1_GunData,GunData
  1637.  move.b PLR1_GunSelected,GunSelected
  1638.  bra waitmaster
  1639.  
  1640. nowaitslave:
  1641.  move.l #PLR2_GunData,GunData
  1642.  move.b PLR2_GunSelected,GunSelected
  1643. waitmaster:
  1644.  
  1645.  move.l d0,d1
  1646.  move.l d1,d0
  1647.  move.w d0,pl1l
  1648.  swap d0
  1649.  move.w d0,pl1h
  1650.  
  1651.  add.l #10240,d1
  1652.  move.l d1,d0
  1653.  move.w d0,pl2l
  1654.  swap d0
  1655.  move.w d0,pl2h
  1656.  
  1657.  add.l #10240,d1
  1658.  move.l d1,d0
  1659.  move.w d0,pl3l
  1660.  swap d0
  1661.  move.w d0,pl3h
  1662.  
  1663.  add.l #10240,d1
  1664.  move.l d1,d0
  1665.  move.w d0,pl4l
  1666.  swap d0
  1667.  move.w d0,pl4h
  1668.  
  1669.  add.l #10240,d1
  1670.  move.l d1,d0
  1671.  move.w d0,pl5l
  1672.  swap d0
  1673.  move.w d0,pl5h
  1674.  
  1675.  add.l #10240,d1
  1676.  move.l d1,d0
  1677.  move.w d0,pl6l
  1678.  swap d0
  1679.  move.w d0,pl6h
  1680.  
  1681.  add.l #10240,d1
  1682.  move.l d1,d0
  1683.  move.w d0,pl7l
  1684.  swap d0
  1685.  move.w d0,pl7h
  1686.  
  1687.  add.l #10240,d1
  1688.  move.l d1,d0
  1689.  move.w d0,pl8l
  1690.  swap d0
  1691.  move.w d0,pl8h 
  1692.  
  1693.  move.l #SMIDDLEY,a0
  1694.  movem.l (a0)+,d0/d1
  1695.  move.l d0,MIDDLEY
  1696.  move.l d1,MIDDLEY+4
  1697.  
  1698.  move.l waterpt,a0
  1699.  move.l (a0)+,watertouse
  1700.  cmp.l #endwaterlist,a0
  1701.  blt.s okwat
  1702.  move.l #waterlist,a0
  1703. okwat:
  1704.  move.l a0,waterpt
  1705.  
  1706.  add.w #640,wtan
  1707.  and.w #8191,wtan
  1708.  add.l #1,wateroff
  1709.  and.l #$3fff3fff,wateroff
  1710.  
  1711.  moveq #0,d0
  1712.  move.b GunSelected,d0
  1713.  move.l LINKFILE,a6
  1714.  add.l #GunBulletTypes,a6
  1715.  move.w (a6,d0.w*8),d0
  1716.  
  1717.  move.l #PLAYERONEAMMO,a6
  1718.  move.w (a6,d0.w*2),d0
  1719.  move.w d0,Ammo
  1720.  
  1721.  move.l PLR1_xoff,OLDX1
  1722.  move.l PLR1_zoff,OLDZ1
  1723.  move.l PLR2_xoff,OLDX2
  1724.  move.l PLR2_zoff,OLDZ2
  1725.  
  1726.  move.l #$dff000,a6
  1727.  
  1728.  cmp.b #'s',mors
  1729.  beq ASlaveShouldWaitOnHisMaster
  1730.  
  1731.  cmp.b #'n',mors
  1732.  bne NotOnePlayer
  1733.  
  1734.  move.w PLAYERONEHEALTH,Energy
  1735.  move.w FramesToDraw,TempFrames
  1736.  cmp.w #15,TempFrames
  1737.  blt.s .okframe
  1738.  move.w #15,TempFrames
  1739. .okframe:
  1740.  move.w #0,FramesToDraw
  1741.  
  1742. *********************************************
  1743. *********** TAKE THIS OUT *******************
  1744. *********************************************
  1745.  
  1746.  move.l CHEATPTR,a4
  1747.  add.l #200000,a4
  1748.  moveq #0,d0
  1749.  move.b (a4),d0
  1750.  
  1751.  move.l #KeyMap,a5
  1752.  tst.b (a5,d0.w)
  1753.  beq.s .nocheat
  1754.  
  1755.  addq #1,a4
  1756.  cmp.l #ENDCHEAT,a4
  1757.  blt.s .nocheat
  1758.  cmp.w #0,CHEATNUM
  1759.  beq.s .nocheat
  1760.  sub.w #1,CHEATNUM
  1761.  move.l #CHEATFRAME,a4
  1762.  move.w #127,PLR1_energy
  1763.  bsr EnergyBar
  1764. .nocheat
  1765.  
  1766.  sub.l #200000,a4
  1767.  move.l a4,CHEATPTR
  1768.  
  1769. **********************************************
  1770. **********************************************
  1771. **********************************************
  1772.  
  1773.  move.l PLR1s_xoff,p1_xoff
  1774.  move.l PLR1s_zoff,p1_zoff
  1775.  move.l PLR1s_yoff,p1_yoff
  1776.  move.l PLR1s_height,p1_height
  1777.  move.w PLR1s_angpos,p1_angpos
  1778.  move.w PLR1_bobble,p1_bobble
  1779.  move.b PLR1_clicked,p1_clicked
  1780.  move.b PLR1_fire,p1_fire
  1781.  clr.b PLR1_clicked
  1782.  move.b PLR1_SPCTAP,p1_spctap
  1783.  clr.b PLR1_SPCTAP
  1784.  move.b PLR1_Ducked,p1_ducked
  1785.  move.b PLR1_GunSelected,p1_gunselected
  1786.  
  1787.  bsr PLR1_Control
  1788.  
  1789.  move.l PLR1_Roompt,a0
  1790.  move.l ToZoneRoof(a0),SplitHeight
  1791.  move.w p1_xoff,THISPLRxoff
  1792.  move.w p1_zoff,THISPLRzoff
  1793.  
  1794.  
  1795.  move.l #$60000,p2_yoff
  1796.  move.l PLR2_Obj,a0
  1797.  move.w #-1,GraphicRoom(a0)
  1798.  move.w #-1,12(a0)
  1799.  move.b #0,17(a0)
  1800.  move.l #BollocksRoom,PLR2_Roompt
  1801.  
  1802.  bra donetalking
  1803.  
  1804. NotOnePlayer:
  1805.  move.l #KeyMap,a5
  1806.  tst.b $19(a5)
  1807.  sne MASTERPAUSE
  1808.  
  1809. *********************************
  1810.  move.w PLAYERONEHEALTH,Energy
  1811. ; change this back
  1812. *********************************
  1813.  
  1814.  jsr SENDFIRST
  1815.  
  1816.  move.w FramesToDraw,TempFrames
  1817.  cmp.w #15,TempFrames
  1818.  blt.s .okframe
  1819.  move.w #15,TempFrames
  1820. .okframe:
  1821.  move.w #0,FramesToDraw
  1822.  
  1823.  move.l PLR1s_xoff,p1_xoff
  1824.  move.l PLR1s_zoff,p1_zoff
  1825.  move.l PLR1s_yoff,p1_yoff
  1826.  move.l PLR1s_height,p1_height
  1827.  move.w PLR1s_angpos,p1_angpos
  1828.  move.w PLR1_bobble,p1_bobble
  1829.  move.b PLR1_clicked,p1_clicked
  1830.  clr.b PLR1_clicked
  1831.  move.b PLR1_fire,p1_fire
  1832.  move.b PLR1_SPCTAP,p1_spctap
  1833.  clr.b PLR1_SPCTAP
  1834.  move.b PLR1_Ducked,p1_ducked
  1835.  move.b PLR1_GunSelected,p1_gunselected
  1836.  
  1837.  move.l p1_xoff,d0
  1838.  jsr SENDFIRST
  1839.  move.l d0,p2_xoff
  1840.  
  1841.  move.l p1_zoff,d0
  1842.  jsr SENDFIRST
  1843.  move.l d0,p2_zoff 
  1844.  
  1845.  move.l p1_yoff,d0
  1846.  jsr SENDFIRST
  1847.  move.l d0,p2_yoff
  1848.   
  1849.  move.l p1_height,d0
  1850.  jsr SENDFIRST
  1851.  move.l d0,p2_height
  1852.  
  1853.  move.w p1_angpos,d0
  1854.  swap d0
  1855.  move.w p1_bobble,d0
  1856.  jsr SENDFIRST
  1857.  move.w d0,p2_bobble
  1858.  swap d0
  1859.  move.w d0,p2_angpos
  1860.  
  1861.  
  1862.  move.w TempFrames,d0
  1863.  swap d0
  1864.  move.b p1_spctap,d0
  1865.  lsl.w #8,d0
  1866.  move.b p1_clicked,d0
  1867.  jsr SENDFIRST
  1868.  move.b d0,p2_clicked
  1869.  lsr.w #8,d0
  1870.  move.b d0,p2_spctap
  1871.  
  1872.  
  1873.  move.w Rand1,d0
  1874.  swap d0
  1875.  move.b p1_ducked,d0
  1876.  lsl.w #8,d0
  1877.  move.b p1_gunselected,d0
  1878.  jsr SENDFIRST
  1879.  move.b d0,p2_gunselected
  1880.  lsr.w #8,d0
  1881.  move.b d0,p2_ducked
  1882.  
  1883.  move.b p1_fire,d0
  1884.  lsl.w #8,d0
  1885.  move.b MASTERQUITTING,d0
  1886.  or.b d0,SLAVEQUITTING
  1887.  swap d0
  1888.  move.b MASTERPAUSE,d0
  1889.  or.b d0,SLAVEPAUSE
  1890.  jsr SENDFIRST
  1891.  or.b d0,MASTERPAUSE
  1892.  or.b d0,SLAVEPAUSE
  1893.  swap d0
  1894.  or.b d0,SLAVEQUITTING
  1895.  or.b d0,MASTERQUITTING
  1896.  lsr.w #8,d0
  1897.  move.b d0,p2_fire
  1898.  
  1899.  bsr PLR1_Control
  1900.  bsr PLR2_Control
  1901.  move.l PLR1_Roompt,a0
  1902.  move.l ToZoneRoof(a0),SplitHeight
  1903.  move.w p1_xoff,THISPLRxoff
  1904.  move.w p1_zoff,THISPLRzoff
  1905.  
  1906.  bra donetalking
  1907.  
  1908. ASlaveShouldWaitOnHisMaster:
  1909.  
  1910.  move.l #KeyMap,a5
  1911.  tst.b $19(a5)
  1912.  sne SLAVEPAUSE
  1913.  
  1914.  
  1915.  move.w PLR2_energy,Energy
  1916.  
  1917.  jsr RECFIRST
  1918.  
  1919.  move.l PLR2s_xoff,p2_xoff
  1920.  move.l PLR2s_zoff,p2_zoff
  1921.  move.l PLR2s_yoff,p2_yoff
  1922.  move.l PLR2s_height,p2_height
  1923.  move.w PLR2s_angpos,p2_angpos
  1924.  move.w PLR2_bobble,p2_bobble
  1925.  move.b PLR2_clicked,p2_clicked
  1926.  clr.b PLR2_clicked
  1927.  move.b PLR2_fire,p2_fire
  1928.  move.b PLR2_SPCTAP,p2_spctap
  1929.  clr.b PLR2_SPCTAP
  1930.  move.b PLR2_Ducked,p2_ducked
  1931.  move.b PLR2_GunSelected,p2_gunselected
  1932.  
  1933.  move.l p2_xoff,d0
  1934.  jsr RECFIRST
  1935.  move.l d0,p1_xoff
  1936.  
  1937.  move.l p2_zoff,d0
  1938.  jsr RECFIRST
  1939.  move.l d0,p1_zoff
  1940.  
  1941.  move.l p2_yoff,d0
  1942.  jsr RECFIRST
  1943.  move.l d0,p1_yoff
  1944.  
  1945.  move.l p2_height,d0
  1946.  jsr RECFIRST
  1947.  move.l d0,p1_height
  1948.  
  1949.  move.w p2_angpos,d0
  1950.  swap d0
  1951.  move.w p2_bobble,d0
  1952.  jsr RECFIRST
  1953.  move.w d0,p1_bobble
  1954.  swap d0
  1955.  move.w d0,p1_angpos
  1956.  
  1957.  
  1958.  move.b p2_spctap,d0
  1959.  lsl.w #8,d0
  1960.  move.b p2_clicked,d0
  1961.  jsr RECFIRST
  1962.  move.b d0,p1_clicked
  1963.  lsr.w #8,d0
  1964.  move.b d0,p1_spctap
  1965.  swap d0
  1966.  move.w d0,TempFrames
  1967.  
  1968.  
  1969.  move.b p2_ducked,d0
  1970.  lsl.w #8,d0
  1971.  move.b p2_gunselected,d0
  1972.  jsr RECFIRST
  1973.  move.b d0,p1_gunselected
  1974.  lsr.w #8,d0
  1975.  move.b d0,p1_ducked
  1976.  swap d0
  1977.  move.w d0,Rand1
  1978.  
  1979.  move.b p2_fire,d0
  1980.  lsl.w #8,d0
  1981.  move.b SLAVEQUITTING,d0
  1982.  or.b d0,MASTERQUITTING
  1983.  swap d0
  1984.  move.b SLAVEPAUSE,d0
  1985.  or.b d0,MASTERPAUSE
  1986.  jsr RECFIRST
  1987.  or.b d0,MASTERPAUSE
  1988.  or.b d0,SLAVEPAUSE
  1989.  swap d0
  1990.  or.b d0,SLAVEQUITTING
  1991.  or.b d0,MASTERQUITTING
  1992.  lsr.w #8,d0
  1993.  move.b d0,p1_fire
  1994.  
  1995.  
  1996.  bsr PLR1_Control
  1997.  bsr PLR2_Control
  1998.  move.w p2_xoff,THISPLRxoff
  1999.  move.w p2_zoff,THISPLRzoff
  2000.  move.l PLR2_Roompt,a0
  2001.  move.l ToZoneRoof(a0),SplitHeight
  2002.  
  2003. donetalking:
  2004.  
  2005.  
  2006.  
  2007.  move.l #ZoneBrightTable,a1
  2008.  move.l ZoneAdds,a2
  2009.  move.l PLR2_ListOfGraphRooms,a0
  2010. ; move.l PLR2_PointsToRotatePtr,a5
  2011.  move.l a0,a5
  2012.  cmp.b #'s',mors
  2013.  beq.s doallz
  2014.  move.l PLR1_ListOfGraphRooms,a0
  2015. ; move.l PLR1_PointsToRotatePtr,a5
  2016.  move.l a0,a5 
  2017. doallz
  2018.  move.w (a0),d0
  2019.  blt.s doneallz
  2020.  add.w #8,a0
  2021.  
  2022.  move.l (a2,d0.w*4),a3
  2023.  add.l LEVELDATA,a3
  2024.  move.w ToZoneBrightness(a3),d2
  2025.  
  2026.  blt.s justbright
  2027.  move.w d2,d3
  2028.  lsr.w #8,d3
  2029.  tst.b d3
  2030.  beq.s justbright
  2031.  
  2032.  move.l #BrightAnimTable,a4
  2033.  move.w -2(a4,d3.w*2),d2
  2034.  
  2035. justbright:
  2036.  muls #32,d2
  2037.  divs #20,d2
  2038.  move.w d2,(a1,d0.w*4)
  2039.  
  2040.  move.w ToUpperBrightness(a3),d2
  2041.  
  2042.  blt.s justbright2
  2043.  move.w d2,d3
  2044.  lsr.w #8,d3
  2045.  tst.b d3
  2046.  beq.s justbright2
  2047.  
  2048.  move.l #BrightAnimTable,a4
  2049.  move.w -2(a4,d3.w*2),d2
  2050.  
  2051. justbright2:
  2052.  
  2053.  muls #32,d2
  2054.  divs #20,d2
  2055.  move.w d2,2(a1,d0.w*4)
  2056.  
  2057.  bra doallz
  2058.  
  2059. doneallz:
  2060.  
  2061.  move.l PointBrights,a2
  2062.  move.l #CurrentPointBrights,a3
  2063. justtheone:
  2064.  move.w (a5),d0
  2065.  blt whythehell
  2066.  addq #8,a5
  2067.  
  2068.  muls #40,d0
  2069.  
  2070.  move.w #39,d7
  2071.  
  2072. allinzone:
  2073.  move.w (a2,d0.w*2),d2
  2074.  
  2075.  tst.b d2
  2076.  blt.s .justbright
  2077.  move.w d2,d3
  2078.  lsr.w #8,d3
  2079.  tst.b d3
  2080.  beq.s .justbright
  2081.  
  2082.  move.w d3,d4
  2083.  and.w #$f,d3
  2084.  lsr.w #4,d4
  2085.  add.w #1,d4
  2086.  move.l #BrightAnimTable,a0
  2087.  move.w -2(a0,d3.w*2),d3
  2088.  ext.w d2
  2089.  sub.w d2,d3
  2090.  muls d4,d3
  2091.  asr.w #4,d3
  2092.  add.w d3,d2
  2093.  
  2094. .justbright:
  2095.  ext.w d2
  2096.  
  2097.  muls #31,d2
  2098.  divs #20,d2
  2099.  bge.s .itspos
  2100.  sub.w #600,d2
  2101. .itspos:
  2102.  add.w #300,d2
  2103.  
  2104.  move.w d2,(a3,d0.w*2)
  2105.  addq #1,d0
  2106.  dbra d7,allinzone
  2107.  
  2108.  bra justtheone
  2109.  
  2110. whythehell:
  2111.  
  2112.  move.l PLR1_Roompt,a0
  2113.  move.l #CurrentPointBrights,a1
  2114.  move.l ZoneBorderPts,a2
  2115.  move.w (a0),d0
  2116.  muls #10,d0
  2117.  lea (a2,d0.w*2),a2
  2118.  lea (a1,d0.w*8),a1
  2119.  
  2120.  moveq #9,d7
  2121.  moveq #0,d0
  2122.  moveq #0,d1
  2123. findaverage:
  2124.  tst.w (a2)+
  2125.  blt.s .foundaverage
  2126.  addq #1,d0
  2127.  move.w (a1)+,d2
  2128.  bge.s .okpos
  2129.  neg.w d2
  2130. .okpos:
  2131.  add.w d2,d1
  2132.  
  2133.  dbra d7,findaverage
  2134.  
  2135. .foundaverage:
  2136.  
  2137.  ext.l d1
  2138.  divs d0,d1
  2139.  sub.w #300,d1
  2140.  move.w d1,PLR1_RoomBright
  2141.  
  2142.  cmp.b #'n',mors
  2143.  beq nosee
  2144.  
  2145.  move.l PLR1_Roompt,FromRoom
  2146.  move.l PLR2_Roompt,ToRoom
  2147.  move.w p1_xoff,Viewerx
  2148.  move.w p1_zoff,Viewerz
  2149.  move.l p1_yoff,d0
  2150.  asr.l #7,d0
  2151.  move.w d0,Viewery
  2152.  move.w p2_xoff,Targetx
  2153.  move.w p2_zoff,Targetz
  2154.  move.l p2_yoff,d0
  2155.  asr.l #7,d0
  2156.  move.w d0,Targety
  2157.  move.b PLR1_StoodInTop,ViewerTop
  2158.  move.b PLR2_StoodInTop,TargetTop
  2159.  jsr CanItBeSeen
  2160.  
  2161.  move.l PLR1_Obj,a0
  2162.  move.b CanSee,d0
  2163.  and.b #2,d0
  2164.  move.b d0,17(a0)
  2165.  move.l PLR2_Obj,a0
  2166.  move.b CanSee,d0
  2167.  and.b #1,d0
  2168.  move.b d0,17(a0)
  2169.  
  2170. nosee:
  2171.  
  2172.  move.l PLR1_Obj,a0
  2173.  move.b #5,16(a0)
  2174.  move.l PLR2_Obj,a0
  2175.  move.b #11,16(a0)
  2176.  
  2177.  move.w TempFrames,d0
  2178.  add.w d0,p1_holddown
  2179.  cmp.w #30,p1_holddown
  2180.  blt.s oklength
  2181.  move.w #30,p1_holddown
  2182. oklength:
  2183.  
  2184.  tst.b p1_fire
  2185.  bne.s okstillheld
  2186.  sub.w d0,p1_holddown
  2187.  bge.s okstillheld
  2188.  move.w #0,p1_holddown
  2189.  
  2190. okstillheld:
  2191.  
  2192.  move.w TempFrames,d0
  2193.  add.w d0,p2_holddown
  2194.  
  2195.  cmp.w #30,p2_holddown
  2196.  blt.s oklength2
  2197.  move.w #30,p2_holddown
  2198. oklength2:
  2199.  
  2200.  
  2201.  tst.b p2_fire
  2202.  bne.s okstillheld2
  2203.  sub.w d0,p2_holddown
  2204.  bge.s okstillheld2
  2205.  move.w #0,p2_holddown
  2206. okstillheld2:
  2207.  
  2208. ***** CHECKING LIGHT *********
  2209.  
  2210. ; move.w #-20,d0
  2211. ; move.w PLR1_xoff,d1
  2212. ; move.w PLR1_zoff,d2
  2213. ; move.l PLR1_Roompt,a0
  2214. ; move.w (a0),d3
  2215. ; move.w PLR1_angpos,d4
  2216. ;
  2217. ; jsr BRIGHTENPOINTSANGLE
  2218.  
  2219. ******************************
  2220.  
  2221. ; move.l #PLR1_GunData,a1
  2222. ; move.w p1_holddown,d0
  2223. ; move.w #50,10+32*3(a1)
  2224. ; move.l #PLR2_GunData,a1
  2225. ; move.w p2_holddown,d0
  2226. ; move.w #50,10+32*3(a1)
  2227.  
  2228. ******************************************
  2229. ******************************************
  2230.  
  2231.  move.w TempFrames,d1
  2232.  bgt.s noze
  2233.  moveq #1,d1
  2234. noze:
  2235.  
  2236.  move.w PLR1_xoff,d0
  2237.  sub.w OLDX1,d0
  2238.  asl.w #4,d0
  2239.  ext.l d0
  2240.  divs d1,d0
  2241.  move.w d0,XDIFF1
  2242.  move.w PLR2_xoff,d0
  2243.  sub.w OLDX2,d0
  2244.  asl.w #4,d0
  2245.  ext.l d0
  2246.  divs d1,d0
  2247.  move.w d0,XDIFF2
  2248.  move.w PLR1_zoff,d0
  2249.  sub.w OLDZ1,d0
  2250.  asl.w #4,d0
  2251.  ext.l d0
  2252.  divs d1,d0
  2253.  move.w d0,ZDIFF1
  2254.  move.w PLR2_zoff,d0
  2255.  sub.w OLDZ2,d0
  2256.  asl.w #4,d0
  2257.  ext.l d0
  2258.  divs d1,d0
  2259.  move.w d0,ZDIFF2
  2260.  
  2261.  cmp.b #'s',mors
  2262.  beq.s ImPlayer2OhYesIAm
  2263.  bsr USEPLR1
  2264.  bra IWasPlayer1
  2265.  
  2266. ImPlayer2OhYesIAm:
  2267.  bsr USEPLR2
  2268. IWasPlayer1:
  2269.  
  2270.  
  2271.  cmp.b #'s',mors
  2272.  beq drawplayer2
  2273.  
  2274.  move.w #0,scaleval
  2275.  
  2276.  move.l PLR1_xoff,xoff
  2277.  move.l PLR1_yoff,yoff
  2278.  move.l PLR1_zoff,zoff
  2279.  move.w PLR1_angpos,angpos
  2280.  move.w PLR1_cosval,cosval
  2281.  move.w PLR1_sinval,sinval
  2282.  
  2283.  
  2284.  move.l PLR1_ListOfGraphRooms,ListOfGraphRooms
  2285.  move.l PLR1_PointsToRotatePtr,PointsToRotatePtr
  2286.  move.l PLR1_Roompt,Roompt
  2287.  
  2288.  bsr OrderZones
  2289.  jsr objmoveanim
  2290.  bsr EnergyBar
  2291.  bsr AmmoBar
  2292.  
  2293. ;********************************************
  2294. ;************* Do reflection ****************
  2295. ;
  2296. ; move.l ListOfGraphRooms,a0
  2297. ; move.l ZoneAdds,a1
  2298. ;checkwaterheights
  2299. ; move.w (a0),d0
  2300. ; blt allzonesdone
  2301. ; addq #8,a0
  2302. ; move.l (a1,d0.w*4),a2
  2303. ; add.l LEVELDATA,a2
  2304. ; move.l ToZoneWater(a2),d0
  2305. ; cmp.l ToZoneFloor(a2),d0
  2306. ; blt.s WEHAVEAHEIGHT
  2307. ; bra.s checkwaterheights
  2308. ;
  2309. ;WEHAVEAHEIGHT:
  2310. ;
  2311. ; sub.l yoff,d0
  2312. ; blt.s underwater
  2313. ; add.l d0,d0
  2314. ; add.l d0,yoff
  2315. ; move.l FASTBUFFER2,FASTBUFFER
  2316. ; move.w #0,leftclip
  2317. ; move.w RIGHTX,rightclip
  2318. ; move.w #0,deftopclip
  2319. ; move.w #BOTTOMY/2,defbotclip
  2320. ; move.w #0,topclip
  2321. ; move.w #BOTTOMY/2,botclip
  2322. ;
  2323. ; clr.b DOANYWATER 
  2324. ; bsr DrawDisplay
  2325. ;allzonesdone:
  2326. ;underwater:
  2327.  
  2328. ********************************************
  2329.  
  2330.  st DOANYWATER
  2331.  
  2332.  move.l PLR1_yoff,yoff
  2333.  
  2334.  move.w #0,leftclip
  2335.  move.w RIGHTX,rightclip
  2336.  move.w #0,deftopclip
  2337.  move.w WIDESCRN,d0
  2338.  add.w d0,deftopclip
  2339.  
  2340.  move.w BOTTOMY,defbotclip
  2341.  sub.w d0,defbotclip
  2342.  move.w #0,topclip
  2343.  add.w d0,topclip
  2344.  move.w BOTTOMY,botclip
  2345.  sub.w d0,botclip
  2346. ; sub.l #10*104*4,frompt
  2347. ; sub.l #10*104*4,midpt
  2348.  
  2349. * Subroom loop
  2350.  
  2351.  bsr DrawDisplay 
  2352.  
  2353.  bra nodrawp2
  2354.  
  2355. drawplayer2
  2356.  
  2357.  move.w #0,scaleval
  2358.  move.l PLR2_xoff,xoff
  2359.  move.l PLR2_yoff,yoff
  2360.  move.l PLR2_zoff,zoff
  2361.  move.w PLR2_angpos,angpos
  2362.  move.w PLR2_cosval,cosval
  2363.  move.w PLR2_sinval,sinval 
  2364.  
  2365.  
  2366.  
  2367.  move.l PLR2_ListOfGraphRooms,ListOfGraphRooms
  2368.  move.l PLR2_PointsToRotatePtr,PointsToRotatePtr
  2369.  move.l PLR2_Roompt,Roompt
  2370.  
  2371.  
  2372.  bsr OrderZones
  2373.  jsr objmoveanim
  2374.  bsr EnergyBar
  2375.  bsr AmmoBar
  2376.  
  2377.  move.w WIDESCRN,d0
  2378.  
  2379.  move.w #0,leftclip
  2380.  move.w RIGHTX,rightclip
  2381.  move.w #0,deftopclip
  2382.  add.w d0,deftopclip
  2383.  move.w BOTTOMY,defbotclip
  2384.  sub.w d0,defbotclip
  2385.  move.w #0,topclip
  2386.  add.w d0,topclip
  2387.  move.w BOTTOMY,botclip
  2388.  sub.w d0,botclip
  2389.  
  2390.  bsr DrawDisplay
  2391.  
  2392. nodrawp2:
  2393.  
  2394. ***************************************** 
  2395. * Copy from copbuff to chip ram
  2396.  
  2397.  
  2398. ; move.l drawpt,a3
  2399. ; adda.w #10,a3
  2400. ; move.l COPSCRNBUFF,a2
  2401. ; move.w #2,d6
  2402. ; adda.w #10,a2
  2403. ;COPYOUT
  2404. ; move.w #31,d0
  2405. ;COPYDOWN1:
  2406. ; move.w #3,d1
  2407. ; move.l a2,a4
  2408. ; move.l a3,a5
  2409. ;.inlop1:
  2410. ;val SET 0
  2411. ; REPT 20
  2412. ; move.w val(a4),val(a5)
  2413. ;val SET val+104*4
  2414. ; ENDR
  2415. ; adda.l #104*4*20,a4
  2416. ; adda.l #104*4*20,a5
  2417. ; dbra d1,.inlop1
  2418. ; addq #4,a2
  2419. ; addq #4,a3
  2420. ; dbra d0,COPYDOWN1
  2421. ; addq #4,a2
  2422. ; addq #4,a3
  2423. ; dbra d6,COPYOUT 
  2424.  
  2425.  tst.b MAPON
  2426.  beq.s .nomap
  2427.  bsr DoTheMapWotNastyCharlesIsForcingMeToDo
  2428. .nomap
  2429.  
  2430.  move.w WIDESCRN,d7
  2431.  
  2432.  tst.b FULLSCR
  2433.  beq nobigconv
  2434.  
  2435.  move.l FASTBUFFER,a0
  2436. ; add.l #320*2*20,a0
  2437.  move.w d7,d6
  2438.  muls #320,d6
  2439.  add.l d6,a0
  2440.  move.l SCRNDRAWPT,a1
  2441.  move.w d7,d6
  2442.  muls #40,d6
  2443.  add.l d6,a1
  2444.  add.l #2,a1
  2445.  move.l #(288/8)-1,d0
  2446.  move.l #239,d1
  2447.  sub.w d7,d1
  2448.  sub.w d7,d1
  2449.  blt nochunk
  2450.  move.w #(320-288),d2
  2451.  move.w #4,d3
  2452.  
  2453.  bra donebigconv
  2454.  
  2455. nobigconv:
  2456.  
  2457.  move.l FASTBUFFER,a0
  2458.  move.w d7,d6
  2459.  muls #320,d6
  2460.  add.l d6,a0
  2461.  move.l SCRNDRAWPT,a1
  2462.  add.l #8+40*20,a1
  2463.  move.w d7,d6
  2464.  muls #40,d6
  2465.  add.l d6,a1
  2466.  move.l #(192/8)-1,d0
  2467.  move.l #159,d1
  2468.  sub.w d7,d1
  2469.  sub.w d7,d1
  2470.  blt nochunk
  2471.  move.w #(320-192),d2
  2472.  move.w #16,d3
  2473. donebigconv
  2474.  
  2475.  tst.b DOUBLEHEIGHT
  2476.  beq.s .nodoub
  2477.  asr.w #1,d1
  2478.  blt nochunk
  2479.  add.w #320,d2
  2480.  add.w #40,d3
  2481. .nodoub:
  2482.  
  2483.  move.b DOUBLEWIDTH,d4
  2484.  
  2485.  jsr CHUNKYTOPLANAR 
  2486.  
  2487. nochunk:
  2488.  
  2489.  move.l #KeyMap,a5
  2490.  tst.b $4a(a5)
  2491.  beq .nosmallscr
  2492.  
  2493.  move.l #0,d7
  2494.  move.l #0,d6
  2495.  tst.b FULLSCR
  2496.  bne.s .attop
  2497.  move.l #40*20,d7
  2498.  move.l #40*60,d6
  2499. .attop:
  2500.  
  2501.  move.w WIDESCRN,d0
  2502.  move.l SCRNDRAWPT,a0
  2503.  add.l d7,a0
  2504.  muls #40,d0
  2505.  add.l d0,a0
  2506.  bsr CLRTWOLINES
  2507.  move.w WIDESCRN,d0
  2508.  move.l SCRNSHOWPT,a0
  2509.  add.l d7,a0
  2510.  muls #40,d0
  2511.  add.l d0,a0
  2512.  bsr CLRTWOLINES
  2513.  
  2514.  add.w #2,WIDESCRN
  2515.  
  2516.  move.l SCRNDRAWPT,a0
  2517.  add.l #240*40,a0
  2518.  sub.l d6,a0
  2519.  move.w WIDESCRN,d0
  2520.  muls #40,d0
  2521.  sub.l d0,a0
  2522.  bsr CLRTWOLINES
  2523.  move.l SCRNSHOWPT,a0
  2524.  sub.l d6,a0
  2525.  add.l #240*40,a0
  2526.  move.w WIDESCRN,d0
  2527.  muls #40,d0
  2528.  sub.l d0,a0
  2529.  bsr CLRTWOLINES
  2530.  
  2531. .nosmallscr
  2532.  
  2533.  tst.b $5e(a5)
  2534.  beq.s .nobigscr
  2535.  tst.w WIDESCRN
  2536.  ble.s .nobigscr
  2537.  
  2538.  sub.w #2,WIDESCRN
  2539.  
  2540. .nobigscr
  2541.  
  2542.  
  2543.  tst.b (a5)
  2544.  beq.s .nosavescrn
  2545.  
  2546. ; not.b USEDOUG
  2547.  
  2548.  jsr SAVETHESCREEN
  2549.  
  2550. .nosavescrn:
  2551.  
  2552.  tst.b $5b(a5)
  2553.  beq notdoubheight
  2554.  tst.b LASTDH
  2555.  bne notdoubheight2
  2556.  st LASTDH 
  2557.  
  2558.  move.w #0,d0
  2559.  move.w #0,d1
  2560.  
  2561.  not.b DOUBLEHEIGHT
  2562.  beq.s singlepixheight
  2563.  move.w #-40,d0
  2564.  move.w #40,d1
  2565.  
  2566. singlepixheight:
  2567.  
  2568.  move.l #SCRMODULOS,a0
  2569.  move.w #119,d2
  2570. putinmode:
  2571.  move.w d0,6(a0)
  2572.  move.w d0,6+4(a0)
  2573.  move.w d1,6+16(a0)
  2574.  move.w d1,6+16+4(a0)
  2575.  add.w #32,a0
  2576.  dbra d2,putinmode
  2577.  
  2578.  bra notdoubheight2
  2579.  
  2580. notdoubheight:
  2581.  clr.b LASTDH
  2582. notdoubheight2
  2583.  
  2584.  tst.b $5a(a5)
  2585.  beq.s notdoubwidth
  2586.  tst.b LASTDW
  2587.  bne notdoubwidth2
  2588.  st LASTDW
  2589.  not.b DOUBLEWIDTH
  2590.  bra.s notdoubwidth2
  2591.  
  2592. notdoubwidth:
  2593.  clr.b LASTDW
  2594. notdoubwidth2:
  2595.  
  2596. ***************************************** 
  2597.  move.l PLR2_Roompt,a0
  2598.  move.l #WorkSpace,a1
  2599.  clr.l (a1)
  2600.  clr.l 4(a1)
  2601.  clr.l 8(a1)
  2602.  clr.l 12(a1)
  2603.  clr.l 16(a1)
  2604.  clr.l 20(a1)
  2605.  clr.l 24(a1)
  2606.  clr.l 28(a1)
  2607.  
  2608.  cmp.b #'n',mors
  2609.  beq.s plr1only
  2610.  
  2611.  lea ToListOfGraph(a0),a0
  2612. .doallrooms:
  2613.  move.w (a0),d0
  2614.  blt.s .allroomsdone
  2615.  addq #8,a0
  2616.  move.w d0,d1
  2617.  asr.w #3,d0
  2618.  bset d1,(a1,d0.w)
  2619.  bra .doallrooms
  2620. .allroomsdone:
  2621.  
  2622. plr1only:
  2623.  
  2624.  move.l PLR1_Roompt,a0
  2625.  lea ToListOfGraph(a0),a0
  2626. .doallrooms2:
  2627.  move.w (a0),d0
  2628.  blt.s .allroomsdone2
  2629.  addq #8,a0
  2630.  move.w d0,d1
  2631.  asr.w #3,d0
  2632.  bset d1,(a1,d0.w)
  2633.  bra .doallrooms2
  2634. .allroomsdone2:
  2635.  
  2636.  move.l #%000001,d7
  2637.  lea TEAMWORK,a2
  2638.  move.l ObjectData,a0
  2639.  sub.w #64,a0
  2640. .doallobs:
  2641.  add.w #64,a0
  2642.  move.w (a0),d0
  2643.  blt.s .allobsdone
  2644.  move.w 12(a0),d0
  2645.  blt.s .doallobs
  2646.  move.w d0,d1
  2647.  asr.w #3,d0
  2648.  btst d1,(a1,d0.w)
  2649.  bne.s .worryobj
  2650.  move.b 16(a0),d0
  2651.  btst d0,d7
  2652.  beq.s .doallobs
  2653.  moveq #0,d0
  2654.  move.b teamnumber(a0),d0
  2655.  blt.s .doallobs
  2656.  asl.w #4,d0
  2657.  tst.w SEENBY(a2,d0.w)
  2658.  blt.s .doallobs
  2659. .worryobj:
  2660.  or.b #127,worry(a0)
  2661.  bra.s .doallobs
  2662. .allobsdone:
  2663.  
  2664.  
  2665.  
  2666. ; move.l #brightentab,a0
  2667. ; move.l frompt,a3
  2668. ; adda.w #(4*33)+(104*4*20),a3
  2669. ; move.w #20,d7
  2670. ; move.w #20,d6
  2671. ;horl:
  2672. ; move.w d6,d5
  2673. ; move.l a3,a1
  2674. ;vertl
  2675. ; move.w (a1),d0
  2676. ; move.w (a0,d0.w*2),(a1)
  2677. ; addq #4,a1
  2678. ; dbra d5,vertl
  2679. ; adda.w #104*4,a3
  2680. ; dbra d7,horl
  2681.  
  2682.  move.l #$dff000,a6
  2683.  
  2684. ; move.w #$300,col0(a6)
  2685.  
  2686.  move.l #KeyMap,a5
  2687.  tst.b $45(a5)
  2688.  beq.s noend
  2689.  
  2690.  cmp.b #'s',mors
  2691.  beq plr2quit 
  2692.  
  2693.  st MASTERQUITTING
  2694.  bra noend
  2695.  
  2696. plr2quit:
  2697.  st SLAVEQUITTING
  2698. noend:
  2699.  
  2700.  tst.b MASTERQUITTING
  2701.  beq.s .noquit
  2702.  tst.b SLAVEQUITTING
  2703.  bne endnomusic
  2704. .noquit
  2705.  
  2706.  cmp.b #'n',mors
  2707.  bne.s noexit
  2708.  move.l PLR1_Roompt,a0
  2709.  move.w (a0),d0
  2710.  move.w PLOPT,d1
  2711.  move.l #ENDZONES,a0
  2712.  cmp.w (a0,d1.w*2),d0
  2713.  
  2714. ; change this for quick exit, charlie
  2715. zzzz:
  2716. ; bra end
  2717.  
  2718.  beq end
  2719. noexit:
  2720.  
  2721.  tst.w PLAYERONEHEALTH
  2722.  ble end
  2723.  tst.w PLR2_energy
  2724.  ble end
  2725.  
  2726. ; move.l SwitchData,a0
  2727. ; tst.b 24+8(a0)
  2728. ; bne end
  2729.   
  2730. ; JSR STOPTIMER
  2731.  
  2732.  
  2733.  bra lop
  2734.  
  2735. CLRTWOLINES:
  2736.  
  2737.  moveq #0,d1
  2738.  move.w #7,d2
  2739. .ccc
  2740.  move.l d1,2(a0)
  2741.  move.l d1,6(a0)
  2742.  move.l d1,10(a0)
  2743.  move.l d1,14(a0)
  2744.  move.l d1,18(a0)
  2745.  move.l d1,22(a0)
  2746.  move.l d1,26(a0)
  2747.  move.l d1,30(a0)
  2748.  move.l d1,34(a0)
  2749.  move.l d1,2+40(a0)
  2750.  move.l d1,6+40(a0)
  2751.  move.l d1,10+40(a0)
  2752.  move.l d1,14+40(a0)
  2753.  move.l d1,18+40(a0)
  2754.  move.l d1,22+40(a0)
  2755.  move.l d1,26+40(a0)
  2756.  move.l d1,30+40(a0)
  2757.  move.l d1,34+40(a0)
  2758.  add.l #10240,a0
  2759.  dbra d2,.ccc
  2760.  rts
  2761.  
  2762.  
  2763. LASTDH: dc.b 0
  2764. LASTDW: dc.b 0
  2765. WIDESCRN: dc.w 0
  2766. TRRANS: dc.w 0
  2767. DOANYWATER: dc.w 0
  2768.  
  2769. DoTheMapWotNastyCharlesIsForcingMeToDo:
  2770.  
  2771.  move.l #SHADINGTABLE,a4
  2772. ; add.w MAPBRIGHT,a4
  2773.  
  2774.  move.l #KeyMap,a5
  2775.  tst.b $50(a5)
  2776.  beq.s .nobrighter
  2777.  tst.w MAPBRIGHT
  2778.  beq.s .nobrighter
  2779.  
  2780.  sub.w #1,MAPBRIGHT
  2781.  
  2782. .nobrighter:
  2783.  
  2784.  tst.b $51(a5)
  2785.  beq.s .nodimmer
  2786.  cmp.w #7,MAPBRIGHT
  2787.  bge.s .nodimmer
  2788.  
  2789.  add.w #1,MAPBRIGHT
  2790.  
  2791. .nodimmer:
  2792.  
  2793.  move.l #Rotated,a1
  2794.  move.l #COMPACTMAP,a2
  2795.  move.l #BIGMAP-40,a3
  2796.  
  2797. preshow:
  2798.  add.w #40,a3
  2799.  
  2800. SHOWMAP:
  2801.  move.l (a2)+,d5
  2802.  move.l a2,d7
  2803.  cmp.l LASTZONE,d7
  2804.  bgt shownmap
  2805.  
  2806.  tst.l d5
  2807.  beq.s preshow
  2808.  
  2809.  move.w #9,d7
  2810. wallsofzone
  2811.  
  2812.  asr.l #1,d5
  2813.  bcs.s WALLSEEN
  2814.  
  2815.  asr.l #1,d5
  2816.  bcs.s WALLMAPPED
  2817.  
  2818.  asr.l #1,d5
  2819.  addq #4,a3
  2820.  bra.s DECIDEDWALL
  2821.  
  2822. WALLMAPPED:
  2823.  move.w #$b00,d4
  2824.  asr.l #1,d5
  2825.  bcc.s .notadoor
  2826.  move.w #$e00,d4
  2827. .notadoor
  2828.  
  2829.  st TRRANS
  2830.  
  2831.  bra.s DECIDEDCOLOUR
  2832.  
  2833. WALLSEEN:
  2834.  
  2835.  clr.b TRRANS
  2836.  
  2837.  move.w #255,d4
  2838.  asr.l #2,d5
  2839.  bcc.s .notadoor
  2840.  move.w #254,d4
  2841. .notadoor
  2842. DECIDEDCOLOUR:
  2843.  move.w (a3)+,d6
  2844.  move.l (a1,d6.w*8),d0
  2845.  asr.l #7,d0
  2846.  add.w mapxoff,d0
  2847.  move.w 6(a1,d6.w*8),d1
  2848.  add.w mapzoff,d1
  2849.  move.w (a3)+,d6
  2850.  move.l (a1,d6.w*8),d2
  2851.  asr.l #7,d2
  2852.  add.w mapxoff,d2
  2853.  move.w 6(a1,d6.w*8),d3
  2854.  add.w mapzoff,d3
  2855.  
  2856.  neg.w d1
  2857.  neg.w d3
  2858.  
  2859.  movem.l d7/d5,-(a7)
  2860.  bsr CLIPANDDRAW
  2861.  movem.l (a7)+,d7/d5
  2862.  
  2863. DECIDEDWALL:
  2864.  
  2865.  dbra d7,wallsofzone
  2866.  bra SHOWMAP
  2867.  
  2868. shownmap:
  2869.  
  2870.  clr.b TRRANS
  2871.  
  2872.  move.w mapxoff,d0
  2873.  move.w mapzoff,d1
  2874.  neg.w d1
  2875.  move.w d0,d2
  2876.  move.w d1,d3
  2877.  sub.w #128,d1
  2878.  add.w #128,d3
  2879.  move.w #250,d4
  2880.  bsr CLIPANDDRAW
  2881.  
  2882.  move.w mapxoff,d0
  2883.  move.w mapzoff,d1
  2884.  neg.w d1
  2885.  move.w d0,d2
  2886.  move.w d1,d3
  2887.  sub.w #128,d1
  2888.  sub.w #32,d3
  2889.  sub.w #64,d2
  2890.  move.w #250,d4
  2891.  bsr CLIPANDDRAW
  2892.  
  2893.  move.w mapxoff,d0
  2894.  move.w mapzoff,d1
  2895.  neg.w d1
  2896.  move.w d0,d2
  2897.  move.w d1,d3
  2898.  sub.w #128,d1
  2899.  sub.w #32,d3
  2900.  add.w #64,d2
  2901.  move.w #250,d4
  2902.  bsr CLIPANDDRAW
  2903.  rts
  2904.  
  2905.  
  2906. CLIPANDDRAW:
  2907.  
  2908.  tst.b FULLSCR
  2909.  beq.s .nodov
  2910.  
  2911.  add.w d0,d0
  2912.  add.w d2,d2
  2913.  ext.l d0
  2914.  ext.l d2
  2915.  divs #3,d0
  2916.  divs #3,d2
  2917.  
  2918. .nodov:
  2919.  
  2920.  move.w MAPBRIGHT,d5
  2921.  asr.w d5,d0
  2922.  asr.w d5,d1
  2923.  asr.w d5,d2
  2924.  asr.w d5,d3
  2925.  
  2926. NOSCALING:
  2927.  add.w #96,d0
  2928.  bge p1xpos
  2929.  
  2930.  add.w #96,d2
  2931.  blt OFFSCREEN
  2932.  
  2933. x1nx2p:
  2934.  
  2935.  move.w d3,d5
  2936.  sub.w d1,d5
  2937.  move.w d2,d6
  2938.  sub.w d0,d6
  2939.  beq OFFSCREEN
  2940.  
  2941.  muls d0,d5
  2942.  divs d6,d5
  2943.  sub.w d5,d1
  2944.  move.w #0,d0
  2945.  
  2946.  bra doneleftclip
  2947.  
  2948. p1xpos:
  2949.  
  2950.  add.w #96,d2
  2951.  bge doneleftclip
  2952.  
  2953.  move.w d1,d5
  2954.  sub.w d3,d5
  2955.  move.w d0,d6
  2956.  sub.w d2,d6
  2957.  beq OFFSCREEN
  2958.  
  2959.  muls d2,d5
  2960.  divs d6,d5
  2961.  sub.w d5,d3
  2962.  move.w #0,d2
  2963.  
  2964. doneleftclip:
  2965.  
  2966.  cmp.w #191,d0
  2967.  ble p1xneg
  2968.  
  2969.  cmp.w #191,d2
  2970.  bgt OFFSCREEN
  2971.  
  2972.  move.w d0,d6
  2973.  sub.w d2,d6
  2974.  beq OFFSCREEN
  2975.  sub.w #191,d0
  2976.  move.w d3,d5
  2977.  sub.w d1,d5
  2978.  
  2979.  muls d5,d0
  2980.  divs d6,d0
  2981.  add.w d0,d1
  2982.  move.w #191,d0
  2983.  
  2984.  bra donerightclip
  2985.  
  2986. p1xneg:
  2987.  
  2988.  cmp.w #191,d2
  2989.  ble donerightclip
  2990.  
  2991.  move.w d2,d6
  2992.  sub.w d0,d6
  2993.  beq OFFSCREEN
  2994.  sub.w #191,d2
  2995.  move.w d1,d5
  2996.  sub.w d3,d5
  2997.  
  2998.  muls d5,d2
  2999.  divs d6,d2
  3000.  add.w d2,d3
  3001.  move.w #191,d2
  3002.  
  3003. donerightclip:
  3004.  
  3005. *********************************
  3006.  
  3007.  add.w #80,d1
  3008.  bge p1ypos
  3009.  
  3010.  add.w #80,d3
  3011.  blt OFFSCREEN
  3012.  
  3013.  move.w d2,d5
  3014.  sub.w d0,d5
  3015.  move.w d3,d6
  3016.  sub.w d1,d6
  3017.  beq OFFSCREEN
  3018.  
  3019.  muls d1,d5
  3020.  divs d6,d5
  3021.  sub.w d5,d0
  3022.  move.w #0,d1
  3023.  
  3024.  bra donetopclip
  3025.  
  3026. p1ypos:
  3027.  
  3028.  add.w #80,d3
  3029.  bge donetopclip
  3030.  
  3031.  move.w d0,d5
  3032.  sub.w d2,d5
  3033.  move.w d1,d6
  3034.  sub.w d3,d6
  3035.  beq OFFSCREEN
  3036.  
  3037.  muls d3,d5
  3038.  divs d6,d5
  3039.  sub.w d5,d2
  3040.  move.w #0,d3
  3041.  
  3042. donetopclip:
  3043.  
  3044.  cmp.w #159,d1
  3045.  ble p1yneg
  3046.  
  3047.  cmp.w #159,d3
  3048.  bgt OFFSCREEN
  3049.  
  3050.  move.w d1,d6
  3051.  sub.w d3,d6
  3052.  beq OFFSCREEN
  3053.  sub.w #159,d1
  3054.  move.w d2,d5
  3055.  sub.w d0,d5
  3056.  
  3057.  muls d5,d1
  3058.  divs d6,d1
  3059.  add.w d1,d0
  3060.  move.w #159,d1
  3061.  
  3062.  bra donebotclip
  3063.  
  3064. p1yneg:
  3065.  
  3066.  cmp.w #159,d3
  3067.  ble donebotclip
  3068.  
  3069.  move.w d3,d6
  3070.  sub.w d1,d6
  3071.  beq OFFSCREEN
  3072.  sub.w #159,d3
  3073.  move.w d0,d5
  3074.  sub.w d2,d5
  3075.  
  3076.  muls d5,d3
  3077.  divs d6,d3
  3078.  add.w d3,d2
  3079.  move.w #159,d3
  3080.  
  3081. donebotclip:
  3082.  
  3083.  tst.b TRRANS
  3084.  bne DRAWAtransLINE
  3085.  bra DRAWAMAPLINE
  3086.  
  3087. OFFSCREEN:
  3088. NOLINEtrans:
  3089.  rts
  3090.  
  3091. MAPBRIGHT:
  3092.  dc.w 0
  3093. mapxoff: dc.w 0
  3094. mapzoff: dc.w 0
  3095.  
  3096. DRAWAtransLINE:
  3097.  
  3098.  move.l FASTBUFFER,a0    ; screen to render to.
  3099.  
  3100.  tst.b FULLSCR
  3101.  beq.s .nooffset
  3102.   
  3103.  add.l #(320*40)+(48*2),a0
  3104.   
  3105. .nooffset:
  3106.  
  3107.  cmp.w d1,d3
  3108.  bgt.s .okdown
  3109.  bne.s .aline
  3110.  cmp.w d0,d2
  3111.  beq.s NOLINEtrans 
  3112. .aline
  3113.  exg d0,d2
  3114.  exg d1,d3
  3115. .okdown
  3116.  
  3117.  move.w d1,d5
  3118.  muls #320,d5
  3119.  add.l d5,a0
  3120.  lea (a0,d0.w*2),a0
  3121.  
  3122.  sub.w d1,d3
  3123.  
  3124.  sub.w d0,d2
  3125.  bge.s downrighttrans
  3126.  
  3127. downlefttrans:
  3128.  neg.w d2
  3129.  cmp.w d2,d3
  3130.  bgt.s downmorelefttrans
  3131.  
  3132. downleftmoretrans:
  3133.  move.w #320,d6
  3134.  move.w d2,d0
  3135.  move.w d2,d7
  3136.  
  3137. .linelop:
  3138.  move.b (a0),d4
  3139.  move.b (a4,d4.w*2),(a0)
  3140.  subq #1,a0
  3141.  sub.w d3,d0
  3142.  bgt.s .noextra
  3143.  add.w d2,d0
  3144.  add.w d6,a0
  3145. .noextra:
  3146.  dbra d7,.linelop
  3147.  rts
  3148.  
  3149. downmorelefttrans:
  3150.  move.w #320,d6
  3151.  move.w d3,d0
  3152.  move.w d3,d7
  3153.  
  3154. .linelop:
  3155.  move.b (a0),d4
  3156.  move.b (a4,d4.w*2),(a0)
  3157.  add.w d6,a0
  3158.  sub.w d2,d0
  3159.  bgt.s .noextra
  3160.  add.w d3,d0
  3161.  subq #1,a0
  3162. .noextra:
  3163.  dbra d7,.linelop
  3164.  
  3165.  rts
  3166.  
  3167. downrighttrans:
  3168.  
  3169.  cmp.w d2,d3
  3170.  bgt.s downmorerighttrans
  3171.  
  3172. downrightmoretrans:
  3173.  move.w #320,d6
  3174.  move.w d2,d0
  3175.  move.w d2,d7
  3176.  
  3177. .linelop:
  3178.  move.b (a0),d4
  3179.  move.b (a4,d4.w*2),(a0)+
  3180.  sub.w d3,d0
  3181.  bgt.s .noextra
  3182.  add.w d2,d0
  3183.  add.w d6,a0
  3184. .noextra:
  3185.  dbra d7,.linelop
  3186.  
  3187.  rts
  3188.  
  3189. downmorerighttrans:
  3190.  move.w #320,d6
  3191.  move.w d3,d0
  3192.  move.w d3,d7
  3193.  
  3194. .linelop:
  3195.  move.b (a0),d4
  3196.  move.b (a4,d4.w*2),(a0)
  3197.  add.w d6,a0
  3198.  sub.w d2,d0
  3199.  bgt.s .noextra
  3200.  add.w d3,d0
  3201.  addq #1,a0
  3202. .noextra:
  3203.  dbra d7,.linelop
  3204.  
  3205.  rts
  3206.  
  3207. NOLINE:
  3208.  rts
  3209.  
  3210. DRAWAMAPLINE:
  3211.  
  3212.  
  3213.  move.l FASTBUFFER,a0    ; screen to render to.
  3214.  cmp.w d1,d3
  3215.  bgt.s .okdown
  3216.  bne.s .aline
  3217.  cmp.w d0,d2
  3218.  beq.s NOLINE 
  3219. .aline
  3220.  exg d0,d2
  3221.  exg d1,d3
  3222. .okdown
  3223.  
  3224.  move.w d1,d5
  3225.  muls #320,d5
  3226.  add.l d5,a0
  3227.  lea (a0,d0.w),a0
  3228.  
  3229.  sub.w d1,d3
  3230.  
  3231.  sub.w d0,d2
  3232.  bge.s downright
  3233.  
  3234. downleft:
  3235.  neg.w d2
  3236.  cmp.w d2,d3
  3237.  bgt.s downmoreleft
  3238.  
  3239. downleftmore:
  3240.  move.w #320,d6
  3241.  move.w d2,d0
  3242.  move.w d2,d7
  3243.  addq #1,a0
  3244.  
  3245. .linelop:
  3246.  move.b d4,-(a0)
  3247.  sub.w d3,d0
  3248.  bgt.s .noextra
  3249.  add.w d2,d0
  3250.  add.w d6,a0
  3251. .noextra:
  3252.  dbra d7,.linelop
  3253.  rts
  3254.  
  3255. downmoreleft:
  3256.  move.w #320,d6
  3257.  move.w d3,d0
  3258.  move.w d3,d7
  3259.  
  3260. .linelop:
  3261.  move.b d4,(a0)
  3262.  add.w d6,a0
  3263.  sub.w d2,d0
  3264.  bgt.s .noextra
  3265.  add.w d3,d0
  3266.  subq #1,a0
  3267. .noextra:
  3268.  dbra d7,.linelop
  3269.  
  3270.  rts
  3271.  
  3272. downright:
  3273.  
  3274.  cmp.w d2,d3
  3275.  bgt.s downmoreright
  3276.  
  3277. downrightmore:
  3278.  move.w #320,d6
  3279.  move.w d2,d0
  3280.  move.w d2,d7
  3281.  
  3282. .linelop:
  3283.  move.b d4,(a0)+
  3284.  sub.w d3,d0
  3285.  bgt.s .noextra
  3286.  add.w d2,d0
  3287.  add.w d6,a0
  3288. .noextra:
  3289.  dbra d7,.linelop
  3290.  
  3291.  rts
  3292.  
  3293. downmoreright:
  3294.  move.w #320,d6
  3295.  move.w d3,d0
  3296.  move.w d3,d7
  3297.  
  3298. .linelop:
  3299.  move.b d4,(a0)
  3300.  add.w d6,a0
  3301.  sub.w d2,d0
  3302.  bgt.s .noextra
  3303.  add.w d3,d0
  3304.  addq #1,a0
  3305. .noextra:
  3306.  dbra d7,.linelop
  3307.  
  3308.  rts
  3309.  
  3310. SAVETHESCREEN:
  3311.  
  3312.  move.w #$8020,$dff000+intena
  3313.  
  3314.  move.l doslib,a6
  3315.  move.l #SAVENAME,d1
  3316.  move.l #1006,d2
  3317.  jsr -30(a6)
  3318.  move.l d0,handle
  3319.  
  3320.  move.l doslib,a6
  3321.  move.l #scrn,d2
  3322.  move.l handle,d1
  3323.  move.l #10240*8,d3
  3324.  jsr _LVOWrite(a6)
  3325.  
  3326.  move.l doslib,a6
  3327.  move.l handle,d1
  3328.  jsr -36(a6)
  3329.  
  3330.  move.l doslib,a6
  3331.  move.l #200,d1
  3332.  jsr -198(a6) 
  3333.  
  3334.  move.w #$0020,$dff000+intena
  3335.  
  3336.  add.b #1,SAVELETTER
  3337.  
  3338.  rts
  3339.  
  3340. SAVENAME: dc.b 'df0:rawscrn'
  3341. SAVELETTER: dc.b 'd',0
  3342.  
  3343.  even
  3344.  
  3345.  include "ab3:source_4000/CHUNKY.s"
  3346.  
  3347.  
  3348. MASTERQUITTING: dc.b 0
  3349. SLAVEQUITTING: dc.b 0
  3350. MASTERPAUSE: dc.b 0
  3351. SLAVEPAUSE: dc.b 0
  3352.  
  3353. PAUSEOPTS:
  3354.  include "ab3:source_4000/pauseopts"
  3355.  
  3356. ENDZONES:
  3357. ; LEVEL 1
  3358.  dc.w -1
  3359. ; dc.w 55
  3360. ; LEVEL 2
  3361.  dc.w 149
  3362. ; LEVEL 3
  3363.  dc.w 155
  3364. ; LEVEL 4
  3365.  dc.w 107
  3366. ; LEVEL 5
  3367.  dc.w 67
  3368. ; LEVEL 6
  3369.  dc.w 132
  3370. ; LEVEL 7
  3371.  dc.w 203
  3372. ; LEVEL 8
  3373.  dc.w 166
  3374. ; LEVEL 9
  3375.  dc.w 118
  3376. ; LEVEL 10
  3377.  dc.w 102
  3378. ; LEVEL 11
  3379.  dc.w 103
  3380. ; LEVEL 12
  3381.  dc.w 2
  3382. ; LEVEL 13
  3383.  dc.w 98
  3384. ; LEVEL 14
  3385.  dc.w 0
  3386. ; LEVEL 15
  3387.  dc.w 148
  3388. ; LEVEL 16
  3389.  dc.w 103
  3390.  
  3391. ***************************************************************************
  3392. ***************************************************************************
  3393. ****************** End of Main Loop here ********************************** 
  3394. ***************************************************************************
  3395. ***************************************************************************
  3396.  
  3397. putinsmallscr:
  3398.  
  3399.  rts
  3400.  
  3401.  move.l #$1fe0000,statskip
  3402.  move.l #$1fe0000,statskip+4
  3403.  
  3404.  move.l #healthpal,a5
  3405. ; move.l COPSCRN1,a0
  3406. ; move.l COPSCRN2,a2
  3407.  move.w #scrheight-1,d0
  3408.  move.l #0,d6
  3409.  move.w #0,d3
  3410.  move.w #$2bdf,startwait
  3411.  move.w #$2d01,endwait
  3412. .fillcop
  3413.  move.w #$180,d1
  3414.  
  3415.  move.l a0,a1
  3416.  move.l a2,a3
  3417.  move.w #$10c,(a1)+
  3418.  move.w #$10c,(a3)+
  3419.  move.w d3,(a1)+
  3420.  move.w d3,(a3)+
  3421.  eor.w #$8000,d3
  3422.  
  3423.  move.w #$106,(a1)+
  3424.  move.w #$106,(a3)+
  3425.  move.w #$2c42,d5
  3426.  or.w d3,d5
  3427.  and.w #$fffe,d5
  3428.  move.w d5,(a1)+
  3429.  move.w d5,(a3)+
  3430.  bsr do32
  3431.  
  3432.  move.w #$106,(a1)+
  3433.  move.w #$106,(a3)+
  3434.  move.w #$4c42,d5
  3435.  or.w d3,d5
  3436.  and.w #$fffe,d5
  3437.  move.w d5,(a1)+
  3438.  move.w d5,(a3)+
  3439.  bsr do32
  3440.  
  3441.  move.w #$106,(a1)+
  3442.  move.w #$106,(a3)+
  3443.  move.w #$6c42,d5
  3444.  or.w d3,d5
  3445.  and.w #$fffe,d5
  3446.  move.w d5,(a1)+
  3447.  move.w d5,(a3)+
  3448.  bsr do32
  3449.  
  3450.  
  3451.  move.l #$1060c42,(a1)+
  3452.  move.l #$1060c42,(a3)+
  3453.  move.w #$19e,(a1)+
  3454.  move.w (a5),(a1)+
  3455.  move.w #$19e,(a3)+
  3456.  move.w (a5)+,(a3)+
  3457.  
  3458. **********************************
  3459.  
  3460.  adda.w #104*4,a0
  3461.  adda.w #104*4,a2
  3462.  dbra d0,.fillcop
  3463.  
  3464.  move.w #$48,fetchstart
  3465.  move.w #$88,fetchstop
  3466.  move.w #$2cb1,winstart
  3467.  move.w #$2c91,winstop
  3468.  move.w #-24,modulo
  3469.  move.w #-24,modulo+4
  3470.  
  3471.  move.l #nullspr,d0
  3472.  move.w d0,s4l
  3473.  move.w d0,s5l
  3474.  move.w d0,s6l
  3475.  move.w d0,s7l
  3476.  swap d0
  3477.  move.w d0,s4h
  3478.  move.w d0,s5h
  3479.  move.w d0,s6h
  3480.  move.w d0,s7h 
  3481.  
  3482.  move.l #borders,d0
  3483.  move.w d0,s0l
  3484.  swap d0
  3485.  move.w d0,s0h
  3486.  move.l #borders+2592,d0
  3487.  move.w d0,s1l
  3488.  swap d0
  3489.  move.w d0,s1h
  3490.  move.l #borders+2592*2,d0
  3491.  move.w d0,s2l
  3492.  swap d0
  3493.  move.w d0,s2h
  3494.  move.l #borders+2592*3,d0
  3495.  move.w d0,s3l
  3496.  swap d0
  3497.  move.w d0,s3h
  3498.  
  3499.  
  3500.  move.l #scrn+40,a0
  3501.  move.l #scrn+160,a1
  3502.  move.l #scrn+280,a2
  3503.  move.l #smallscrntab,a3
  3504.  move.w #191,d7    ; counter
  3505.  move.w #0,d1    ; xpos
  3506. .plotscrnloop:
  3507.  move.b (a3)+,d0
  3508.  move.w d1,d2
  3509.  asr.w #3,d2
  3510.  move.b d1,d3
  3511.  not.b d3
  3512.  bclr.b d3,-40(a0,d2.w)
  3513.  bclr.b d3,(a0,d2.w)
  3514.  bclr.b d3,40(a0,d2.w)
  3515.  bclr.b d3,-40(a1,d2.w)
  3516.  bclr.b d3,(a1,d2.w)
  3517.  bclr.b d3,40(a1,d2.w)
  3518.  bclr.b d3,-40(a2,d2.w)
  3519.  btst #0,d0
  3520.  beq.s .nobp1
  3521.  bset.b d3,-40(a0,d2.w)
  3522. .nobp1:
  3523.  btst #1,d0
  3524.  beq.s .nobp2
  3525.  bset.b d3,(a0,d2.w)
  3526. .nobp2:
  3527.  btst #2,d0
  3528.  beq.s .nobp3
  3529.  bset.b d3,40(a0,d2.w)
  3530. .nobp3:
  3531.  btst #3,d0
  3532.  beq.s .nobp4
  3533.  bset.b d3,-40(a1,d2.w)
  3534. .nobp4:
  3535.  btst #4,d0
  3536.  beq.s .nobp5
  3537.  bset.b d3,(a1,d2.w)
  3538. .nobp5:
  3539.  btst #5,d0
  3540.  beq.s .nobp6
  3541.  bset.b d3,40(a1,d2.w)
  3542. .nobp6:
  3543.  btst #6,d0
  3544.  beq.s .nobp7
  3545.  bset.b d3,-40(a2,d2.w)
  3546. .nobp7:
  3547.  
  3548.  addq #1,d1
  3549.  
  3550.  dbra d7,.plotscrnloop
  3551.  
  3552.  
  3553.  rts
  3554.  
  3555. putinlargescr:
  3556.  
  3557.  move.l #$1000000,statskip
  3558.  move.l #$fffffffe,statskip+4
  3559.  
  3560.  move.l #healthpal,a5
  3561. ; move.l COPSCRN1,a0
  3562. ; move.l COPSCRN2,a2
  3563.  move.w #scrheight-1,d0
  3564.  move.l #0,d6
  3565.  move.w #0,d3
  3566.  move.w #$29df,startwait
  3567.  move.w #$2b01,endwait
  3568. .fillcop
  3569.  move.w #$180,d1
  3570.  
  3571.  move.l a0,a1
  3572.  move.l a2,a3
  3573.  move.w #$10c,(a1)+
  3574.  move.w #$10c,(a3)+
  3575.  move.w d3,(a1)+
  3576.  move.w d3,(a3)+
  3577.  eor.w #$8000,d3
  3578.  
  3579.  move.w #$106,(a1)+
  3580.  move.w #$106,(a3)+
  3581.  move.w #$2c42,d5
  3582.  or.w d3,d5
  3583.  and.w #$fffe,d5
  3584.  move.w d5,(a1)+
  3585.  move.w d5,(a3)+
  3586.  bsr do32
  3587.  
  3588.  move.w #$106,(a1)+
  3589.  move.w #$106,(a3)+
  3590.  move.w #$4c42,d5
  3591.  or.w d3,d5
  3592.  and.w #$fffe,d5
  3593.  move.w d5,(a1)+
  3594.  move.w d5,(a3)+
  3595.  bsr do32
  3596.  
  3597.  move.w #$106,(a1)+
  3598.  move.w #$106,(a3)+
  3599.  move.w #$6c42,d5
  3600.  or.w d3,d5
  3601.  and.w #$fffe,d5
  3602.  move.w d5,(a1)+
  3603.  move.w d5,(a3)+
  3604.  bsr do32
  3605.  
  3606.  move.w startwait,(a1)+
  3607.  move.w #$fffe,(a1)+
  3608.  move.w endwait,(a1)+
  3609.  move.w #$ff00,(a1)+
  3610.  move.w startwait,(a3)+
  3611.  move.w #$fffe,(a3)+
  3612.  move.w endwait,(a3)+
  3613.  move.w #$ff00,(a3)+
  3614.  
  3615. ; move.l $1fe0000,(a1)+
  3616. ; move.l $1fe0000,(a3)+
  3617. ; move.l $1fe0000,(a1)+
  3618. ; move.l $1fe0000,(a3)+
  3619.  
  3620.  
  3621.  add.w #$300,startwait
  3622.  add.w #$300,endwait
  3623.  
  3624. ; move.l #$1060c42,(a1)+
  3625. ; move.l #$1060c42,(a3)+
  3626. ; move.w #$19e,(a1)+
  3627. ; move.w (a5),(a1)+
  3628. ; move.w #$19e,(a3)+
  3629. ; move.w (a5)+,(a3)+
  3630.  
  3631. **********************************
  3632.  
  3633.  adda.w #104*4,a0
  3634.  adda.w #104*4,a2
  3635.  dbra d0,.fillcop
  3636.  
  3637.  move.w #$38,fetchstart
  3638.  move.w #$b8,fetchstop
  3639.  move.w #$2c81,winstart
  3640.  move.w #$2cc1,winstop
  3641.  move.w #-40,modulo
  3642.  move.w #-40,modulo+4
  3643.  
  3644.  move.l #nullspr,d0
  3645.  move.w d0,s0l
  3646.  move.w d0,s1l
  3647.  move.w d0,s2l
  3648.  move.w d0,s3l
  3649.  move.w d0,s4l
  3650.  move.w d0,s5l
  3651.  move.w d0,s6l
  3652.  move.w d0,s7l
  3653.  swap d0
  3654.  move.w d0,s0h
  3655.  move.w d0,s1h
  3656.  move.w d0,s2h
  3657.  move.w d0,s3h
  3658.  move.w d0,s4h
  3659.  move.w d0,s5h
  3660.  move.w d0,s6h
  3661.  move.w d0,s7h 
  3662.  
  3663.  move.l #scrn+40,a0
  3664.  move.l #scrn+160,a1
  3665.  move.l #scrn+280,a2
  3666.  move.l #scrntab,a3
  3667.  move.w #319,d7    ; counter
  3668.  move.w #0,d1    ; xpos
  3669. .plotscrnloop:
  3670.  move.b (a3)+,d0
  3671.  move.w d1,d2
  3672.  asr.w #3,d2
  3673.  move.b d1,d3
  3674.  not.b d3
  3675.  bclr.b d3,-40(a0,d2.w)
  3676.  bclr.b d3,(a0,d2.w)
  3677.  bclr.b d3,40(a0,d2.w)
  3678.  bclr.b d3,-40(a1,d2.w)
  3679.  bclr.b d3,(a1,d2.w)
  3680.  bclr.b d3,40(a1,d2.w)
  3681.  bclr.b d3,-40(a2,d2.w)
  3682.  btst #0,d0
  3683.  beq.s .nobp1
  3684.  bset.b d3,-40(a0,d2.w)
  3685. .nobp1:
  3686.  btst #1,d0
  3687.  beq.s .nobp2
  3688.  bset.b d3,(a0,d2.w)
  3689. .nobp2:
  3690.  btst #2,d0
  3691.  beq.s .nobp3
  3692.  bset.b d3,40(a0,d2.w)
  3693. .nobp3:
  3694.  btst #3,d0
  3695.  beq.s .nobp4
  3696.  bset.b d3,-40(a1,d2.w)
  3697. .nobp4:
  3698.  btst #4,d0
  3699.  beq.s .nobp5
  3700.  bset.b d3,(a1,d2.w)
  3701. .nobp5:
  3702.  btst #5,d0
  3703.  beq.s .nobp6
  3704.  bset.b d3,40(a1,d2.w)
  3705. .nobp6:
  3706.  btst #6,d0
  3707.  beq.s .nobp7
  3708.  bset.b d3,-40(a2,d2.w)
  3709. .nobp7:
  3710.  
  3711.  addq #1,d1
  3712.  
  3713.  dbra d7,.plotscrnloop
  3714.  
  3715.  rts
  3716.  
  3717. CLEARKEYBOARD:
  3718.  move.l #KeyMap,a5
  3719.  moveq #0,d0
  3720.  move.w #15,d1
  3721. clrloo:
  3722.  move.l d0,(a5)+
  3723.  move.l d0,(a5)+
  3724.  move.l d0,(a5)+
  3725.  move.l d0,(a5)+
  3726.  dbra d1,clrloo
  3727.  rts
  3728.  
  3729. READCONTROLS: dc.w 0
  3730.  
  3731. tstststst: dc.w 0
  3732.  
  3733. BollocksRoom:
  3734.  dc.w -1
  3735.  ds.l 50
  3736.  
  3737. GUNYOFFS:
  3738.  dc.w 20
  3739.  dc.w 20
  3740.  dc.w 0
  3741.  dc.w 20
  3742.  dc.w 20
  3743.  dc.w 0
  3744.  dc.w 0
  3745.  dc.w 20
  3746.  
  3747. PLR1_BOBBLEY: dc.l 0
  3748.  
  3749. USEPLR1:
  3750.  
  3751. ***********************************
  3752.  
  3753.  move.l PLR1_Obj,a0 
  3754.  move.l ObjectPoints,a1
  3755.  move.l #ObjRotated,a2
  3756.  move.w (a0),d0
  3757.  move.l PLR1_xoff,(a1,d0.w*8)
  3758.  move.l PLR1_zoff,4(a1,d0.w*8)
  3759.  move.l PLR1_Roompt,a1
  3760.  
  3761.  moveq #0,d2
  3762.  move.b damagetaken(a0),d2
  3763.  beq .notbeenshot
  3764.  move.l #7*2116,hitcol
  3765.  sub.w d2,PLAYERONEHEALTH
  3766.  movem.l d0-d7/a0-a6,-(a7)
  3767.  move.b #$fb,IDNUM
  3768.  move.w #19,Samplenum
  3769.  clr.b notifplaying
  3770.  move.w #0,Noisex
  3771.  move.w #0,Noisez
  3772.  move.w #100,Noisevol
  3773.  jsr MakeSomeNoise
  3774.  
  3775.  movem.l (a7)+,d0-d7/a0-a6
  3776.  
  3777. .notbeenshot
  3778.  move.b #0,damagetaken(a0)
  3779.  move.b PLAYERONEHEALTH+1,numlives(a0)
  3780.  
  3781.  move.w p1_angpos,Facing(a0)
  3782.  move.b PLR1_StoodInTop,ObjInTop(a0)
  3783.  
  3784.  move.w (a1),12(a0)
  3785.  move.w (a1),d2
  3786.  move.l #ZoneBrightTable,a1
  3787.  move.l (a1,d2.w*4),d2
  3788.  tst.b PLR1_StoodInTop
  3789.  bne.s .okinbott
  3790.  swap d2
  3791. .okinbott:
  3792.  
  3793.  move.w d2,2(a0)
  3794.  
  3795.  move.l p1_yoff,d0
  3796.  move.l p1_height,d1
  3797.  asr.l #1,d1
  3798.  add.l d1,d0
  3799.  asr.l #7,d0
  3800.  move.w d0,4(a0)
  3801.  
  3802. ***********************************
  3803.  
  3804.  move.l PLR2_Obj,a0 
  3805.  
  3806.  move.w PLR2_angpos,d0
  3807.  and.w #8190,d0
  3808.  move.w d0,Facing(a0)
  3809.  
  3810.  jsr ViewpointToDraw
  3811.  asl.w #2,d0
  3812.  moveq #0,d1
  3813.  move.b p2_bobble,d1
  3814.  not.b d1
  3815.  lsr.b #3,d1
  3816.  and.b #$3,d1
  3817.  add.w d1,d0
  3818.  move.w d0,10(a0)
  3819.  move.w #10,8(a0)
  3820.  
  3821.  move.l ObjectPoints,a1
  3822.  move.l #ObjRotated,a2
  3823.  move.w (a0),d0
  3824.  move.l PLR2_xoff,(a1,d0.w*8)
  3825.  move.l PLR2_zoff,4(a1,d0.w*8)
  3826.  move.l PLR2_Roompt,a1
  3827.  
  3828.  moveq #0,d2
  3829.  move.b damagetaken(a0),d2
  3830.  beq .notbeenshot2
  3831.  sub.w d2,PLR2_energy
  3832. .notbeenshot2
  3833.  move.b #0,damagetaken(a0)
  3834.  move.b PLR2_energy+1,numlives(a0)
  3835.  
  3836.  move.b PLR2_StoodInTop,ObjInTop(a0)
  3837.  
  3838.  move.w (a1),12(a0)
  3839.  move.w (a1),d2
  3840.  move.l #ZoneBrightTable,a1
  3841.  move.l (a1,d2.w*4),d2
  3842.  tst.b PLR2_StoodInTop
  3843.  bne.s .okinbott2
  3844.  swap d2
  3845. .okinbott2:
  3846.  
  3847.  move.w d2,2(a0)
  3848.  
  3849.  move.l p2_yoff,d0
  3850.  move.l p2_height,d1
  3851.  asr.l #1,d1
  3852.  add.l d1,d0
  3853.  asr.l #7,d0
  3854.  move.w d0,4(a0)
  3855.  
  3856. **********************************
  3857.  
  3858.  move.l PLR1_Obj,a0
  3859.  move.l PLR1_Roompt,a1
  3860.  
  3861.  move.w Facing(a0),d0
  3862.  add.w #4096,d0
  3863.  and.w #8190,d0
  3864.  move.w d0,Facing+128(a0)
  3865.  
  3866.  move.w (a1),12+128(a0)
  3867.  move.w (a1),GraphicRoom+128(a0)
  3868.  
  3869.  moveq #0,d0
  3870.  move.b p1_gunselected,d0
  3871.  
  3872.  move.l LINKFILE,a1
  3873.  add.l #GunObjects,a1
  3874.  move.w (a1,d0.w*2),d0
  3875.  
  3876.  move.b d0,TypeOfThing+128(a0)
  3877.  move.b #1,128+16(a0)
  3878.  
  3879.  move.w (a0),d0
  3880.  move.w 128(a0),d1
  3881.  move.l ObjectPoints,a1
  3882.  move.l (a1,d0.w*8),(a1,d1.w*8)
  3883.  move.l 4(a1,d0.w*8),4(a1,d1.w*8)
  3884.  
  3885.  st WhichAnim+128(a0)
  3886.  
  3887.  move.w 4(a0),4+128(a0)
  3888.  move.l PLR1_BOBBLEY,d1
  3889.  asr.l #8,d1
  3890.  add.w d1,4+128(a0)
  3891.  
  3892.  move.b ObjInTop(a0),ObjInTop+128(a0)
  3893.  
  3894.  rts
  3895.  
  3896. DRAWINGUN:
  3897.  move.l #Objects+9*16,a0
  3898.  move.l 4(a0),a5    ; ptr
  3899.  move.l 8(a0),a2    ; frames
  3900.  move.l 12(a0),a4    ; pal
  3901.  move.l (a0),a0        ; wad
  3902.  
  3903.  move.l #GunAnims,a1
  3904.  move.l (a1,d0.w*8),a1
  3905.  move.w (a1,d1.w*2),d5    ; frame of anim
  3906.  
  3907.  move.l #GUNYOFFS,a1
  3908.  move.w (a1,d0.w*2),d7    ; yoff
  3909.  move.l FASTBUFFER,a6
  3910.  move.w d7,d6
  3911.  muls #320*2,d6
  3912.  add.l d6,a6    ; screen pointer
  3913.  
  3914.  asl.w #2,d0
  3915.  add.w d5,d0    ; frame
  3916.  move.w (a2,d0.w*4),d1    ; xoff
  3917.  
  3918.  lea (a5,d1.w),a5    ; right ptr
  3919.  
  3920.  move.w #95,d0
  3921.  bsr DRAWCHUNK
  3922. ; addq.w #4,a6
  3923. ; move.w #31,d0
  3924. ; bsr DRAWCHUNK
  3925. ; addq.w #4,a6
  3926. ; move.w #31,d0
  3927. ; bsr DRAWCHUNK
  3928.  rts
  3929.  
  3930.  
  3931. DRAWCHUNK:
  3932.  move.w #78,d3
  3933.  sub.w d7,d3
  3934.  move.l a6,a3
  3935.  move.b (a5),d2
  3936.  move.l (a5)+,d1
  3937.  bne.s .noblank
  3938.  addq #4,a6
  3939.  dbra d0,DRAWCHUNK 
  3940.  rts
  3941.  
  3942. .noblank:
  3943.  and.l #$ffffff,d1
  3944.  lea (a0,d1.l),a1
  3945.  cmp.b #1,d2
  3946.  bgt.s thirdd
  3947.  beq.s secc
  3948. .drawdown:
  3949.  move.w (a1)+,d2
  3950.  and.w #%11111,d2
  3951.  beq.s .itsblank
  3952.  move.w (a4,d2.w*2),d4
  3953.  move.w d4,d5
  3954.  swap d4
  3955.  move.w d5,d4
  3956.  move.l d4,(a3)
  3957.  move.l d4,320(a3)
  3958. .itsblank
  3959.  add.w #320*2,a3
  3960.  dbra d3,.drawdown
  3961.  
  3962.  addq #2,a6
  3963.  dbra d0,DRAWCHUNK
  3964.  rts
  3965.  
  3966. secc:
  3967. .drawdown:
  3968.  move.w (a1)+,d2
  3969.  lsr.w #5,d2
  3970.  and.w #%11111,d2
  3971.  beq.s .itsblank
  3972.  move.w (a4,d2.w*2),d4
  3973.  move.w d4,d5
  3974.  swap d4
  3975.  move.w d5,d4
  3976.  move.l d4,(a3)
  3977.  move.l d4,320*2(a3)
  3978. .itsblank
  3979.  add.w #320*2*2,a3
  3980.  dbra d3,.drawdown
  3981.  
  3982.  addq #4,a6
  3983.  dbra d0,DRAWCHUNK
  3984.  rts
  3985.  
  3986. thirdd:
  3987. .drawdown:
  3988.  move.b (a1),d2
  3989.  addq #2,a1
  3990.  lsr.b #2,d2
  3991.  and.w #%11111,d2
  3992.  beq.s .itsblank
  3993.  move.w (a4,d2.w*2),d4
  3994.  move.w d4,d5
  3995.  swap d4
  3996.  move.w d5,d4
  3997.  move.l d4,(a3)
  3998.  move.l d4,320*2(a3)
  3999. .itsblank
  4000.  add.w #320*2*2,a3
  4001.  dbra d3,.drawdown
  4002.  
  4003.  addq #4,a6
  4004.  dbra d0,DRAWCHUNK
  4005.  rts
  4006.  
  4007.  
  4008.  
  4009. ***************************************************
  4010. **************************************************
  4011.  
  4012. USEPLR2:
  4013.  
  4014.  PROTKCHECK a0
  4015.  
  4016. ***********************************
  4017.  
  4018.  move.l PLR2_Obj,a0 
  4019.  move.l ObjectPoints,a1
  4020.  move.l #ObjRotated,a2
  4021.  move.w (a0),d0
  4022.  move.l PLR2_xoff,(a1,d0.w*8)
  4023.  move.l PLR2_zoff,4(a1,d0.w*8)
  4024.  move.l PLR2_Roompt,a1
  4025.  
  4026.  moveq #0,d2
  4027.  move.b damagetaken(a0),d2
  4028.  beq .notbeenshot
  4029.  move.l #7*2116,hitcol
  4030.  sub.w d2,PLR2_energy
  4031.  movem.l d0-d7/a0-a6,-(a7)
  4032.  move.w #19,Samplenum
  4033.  clr.b notifplaying
  4034.  move.b #$fb,IDNUM
  4035.  move.w #0,Noisex
  4036.  move.w #0,Noisez
  4037.  move.w #100,Noisevol
  4038.  jsr MakeSomeNoise
  4039.  
  4040.  movem.l (a7)+,d0-d7/a0-a6
  4041.  
  4042. .notbeenshot
  4043.  move.b #0,damagetaken(a0)
  4044.  move.b PLR2_energy+1,numlives(a0)
  4045.  
  4046.  move.b PLR2_StoodInTop,ObjInTop(a0)
  4047.  
  4048.  move.w (a1),12(a0)
  4049.  move.w (a1),d2
  4050.  move.l #ZoneBrightTable,a1
  4051.  move.l (a1,d2.w*4),d2
  4052.  tst.b PLR2_StoodInTop
  4053.  bne.s .okinbott
  4054.  swap d2
  4055. .okinbott:
  4056.  
  4057.  move.w d2,2(a0)
  4058.  
  4059.  move.l PLR2_yoff,d0
  4060.  move.l p2_height,d1
  4061.  asr.l #1,d1
  4062.  add.l d1,d0
  4063.  asr.l #7,d0
  4064.  move.w d0,4(a0)
  4065.  
  4066. ***********************************
  4067.  
  4068.  move.l PLR1_Obj,a0 
  4069.  
  4070.  move.w PLR1_angpos,d0
  4071.  and.w #8190,d0
  4072.  move.w d0,Facing(a0)
  4073.  
  4074.  jsr ViewpointToDraw
  4075.  asl.w #2,d0
  4076.  moveq #0,d1
  4077.  move.b p1_bobble,d1
  4078.  not.b d1
  4079.  lsr.b #3,d1
  4080.  and.b #$3,d1
  4081.  add.w d1,d0
  4082.  move.w d0,10(a0)
  4083.  move.w #10,8(a0)
  4084.  
  4085.  move.l ObjectPoints,a1
  4086.  move.l #ObjRotated,a2
  4087.  move.w (a0),d0
  4088.  move.l PLR1_xoff,(a1,d0.w*8)
  4089.  move.l PLR1_zoff,4(a1,d0.w*8)
  4090.  move.l PLR1_Roompt,a1
  4091.  
  4092.  moveq #0,d2
  4093.  move.b damagetaken(a0),d2
  4094.  beq .notbeenshot2
  4095.  sub.w d2,PLAYERONEHEALTH
  4096. .notbeenshot2
  4097.  move.b #0,damagetaken(a0)
  4098.  move.b PLAYERONEHEALTH+1,numlives(a0)
  4099.  
  4100.  move.b PLR1_StoodInTop,ObjInTop(a0)
  4101.  
  4102.  move.w (a1),12(a0)
  4103.  move.w (a1),d2
  4104.  move.l #ZoneBrightTable,a1
  4105.  move.l (a1,d2.w*4),d2
  4106.  tst.b PLR1_StoodInTop
  4107.  bne.s .okinbott2
  4108.  swap d2
  4109. .okinbott2:
  4110.  
  4111.  move.w d2,2(a0)
  4112.  
  4113.  move.l PLR1_yoff,d0
  4114.  move.l p1_height,d1
  4115.  asr.l #1,d1
  4116.  add.l d1,d0
  4117.  asr.l #7,d0
  4118.  move.w d0,4(a0)
  4119.  
  4120. **********************************
  4121.  
  4122.  move.l PLR2_Obj,a0
  4123.  move.w #-1,12+64(a0)
  4124.  
  4125.  rts
  4126.  
  4127.  
  4128. GunSelected: dc.b 0
  4129.  even
  4130.  
  4131. GunAnims:
  4132.  dc.l MachineAnim,3
  4133.  dc.l PlasmaAnim,5
  4134.  dc.l RocketAnim,5
  4135.  dc.l FlameThrowerAnim,5
  4136.  dc.l GrenadeAnim,12
  4137.  dc.l 0,0
  4138.  dc.l 0,0
  4139.  dc.l ShotGunAnim,12+19+11+20+1
  4140.  
  4141. MachineAnim:
  4142.  dc.w 0,1,2,3
  4143. PlasmaAnim:
  4144.  dc.w 0,1,2,3,3,3
  4145. RocketAnim:
  4146.  dc.w 0,1,2,3,3,3
  4147. FlameThrowerAnim:
  4148.  dc.w 0,1,2,3,3,3
  4149. GrenadeAnim:
  4150.  dc.w 0,1,1,1,1
  4151.  dc.w 2,2,2,2,3
  4152.  dc.w 3,3,3
  4153. ShotGunAnim:
  4154.  dc.w 0
  4155.  dcb.w 12,2
  4156.  dcb.w 19,1
  4157.  dcb.w 11,2
  4158.  dcb.w 20,0
  4159.  dc.w 3
  4160.  
  4161. GunData: dc.l 0
  4162.  
  4163. PLR1_GunData:
  4164. ; 0=Pistol 1=Big Gun
  4165. ; ammoleft,ammopershot(b),gunnoise(b),ammoinclip(b)
  4166.  
  4167. ; VISIBLE/INSTANT (0/FF)
  4168. ; damage,gotgun(b)
  4169. ; Delay (w), Lifetime of bullet (w)
  4170. ; Click or hold down (0,1)
  4171. ; BulSpd: (w)
  4172.  
  4173. ;0
  4174.  dc.w 0
  4175. ;2
  4176.  dc.b 8,3
  4177. ;4
  4178.  dc.b 15
  4179. ;5
  4180.  dc.b -1
  4181. ;6
  4182.  dc.b 4,$ff
  4183. ;8
  4184.  dc.w 5,-1,1,0
  4185. ;16
  4186.  dc.w 0,0,0
  4187. ;22
  4188.  dc.w 1
  4189.  
  4190.  ds.w 4
  4191.  
  4192. ;PlasmaGun
  4193.  
  4194.  dc.w 0
  4195.  dc.b 8,1
  4196.  dc.b 20
  4197.  dc.b 0
  4198.  dc.b 16,0
  4199.  dc.w 10,-1,0,5
  4200.  dc.w 0,0,0
  4201.  dc.w 1
  4202.  
  4203.  ds.w 4
  4204.  
  4205. ;RocketLauncher
  4206.  
  4207.  dc.w 0
  4208.  dc.b 8,9
  4209.  dc.b 2
  4210.  dc.b 0
  4211.  dc.b 12,0
  4212.  dc.w 30,-1,0,5
  4213.  dc.w 0,0,0
  4214.  dc.w 1
  4215.  
  4216.  
  4217.  ds.w 4
  4218.  
  4219. ; FlameThrower
  4220.  
  4221.  dc.w 90*8
  4222.  dc.b 1,22
  4223.  dc.b 40
  4224.  dc.b 0
  4225.  dc.b 8,$0    
  4226.  dc.w 5,50,1,4
  4227.  dc.w 0,0,0
  4228.  dc.w 1
  4229.  
  4230.  ds.w 4
  4231.  
  4232. ;Grenade launcher
  4233.  
  4234.  
  4235.  dc.w 0
  4236.  dc.b 8,9
  4237.  dc.b 6
  4238.  dc.b 0
  4239.  dc.b 8,0
  4240.  dc.w 50,100,1,5
  4241.  dc.w 60,3
  4242.  dc.w -1000
  4243.  dc.w 1
  4244.  
  4245.  ds.w 4
  4246.  
  4247. ; WORMGUN
  4248.  
  4249.  dc.w 0
  4250.  dc.b 0,0
  4251.  dc.b 0
  4252.  dc.b 0,0
  4253.  dc.w 0,-1,0,5
  4254.  dc.w 0,0
  4255.  dc.w 0
  4256.  dc.w 1
  4257.  ds.w 4
  4258.  
  4259. ; ToughMarineGun
  4260.  
  4261.  dc.w 0
  4262.  dc.b 0,0
  4263.  dc.b 0
  4264.  dc.b 0,0
  4265.  dc.w 0,-1,0,5
  4266.  dc.w 0,0
  4267.  dc.w 0
  4268.  dc.w 1
  4269.  ds.w 4
  4270.  
  4271. ; Shotgun
  4272.  
  4273. ;0
  4274.  dc.w 0
  4275. ;2
  4276.  dc.b 8,21
  4277. ;4
  4278.  dc.b 15
  4279. ;5
  4280.  dc.b -1
  4281. ;6
  4282.  dc.b 4,0
  4283. ;8
  4284.  dc.w 50,-1,1,0
  4285. ;16
  4286.  dc.w 0,0,0
  4287. ;22
  4288.  dc.w 7
  4289.  
  4290.  ds.w 4
  4291.  
  4292. PLR2_GunData:
  4293. ; 0=Pistol 1=Big Gun
  4294. ; ammoleft,ammopershot(b),gunnoise(b),ammoinclip(b)
  4295.  
  4296. ; VISIBLE/INSTANT (0/FF)
  4297. ; damage,gotgun(b)
  4298. ; Delay (w)
  4299.  
  4300. ;0
  4301.  dc.w 0
  4302. ;2
  4303.  dc.b 8,3
  4304. ;4
  4305.  dc.b 15
  4306. ;5
  4307.  dc.b -1
  4308. ;6
  4309.  dc.b 4,$ff
  4310. ;8
  4311.  dc.w 5,-1,1,0
  4312. ;16
  4313.  dc.w 0,0,0
  4314. ;22
  4315.  dc.w 1
  4316.  
  4317.  ds.w 4
  4318.  
  4319. ;PlasmaGun
  4320.  
  4321.  dc.w 0
  4322.  dc.b 8,1
  4323.  dc.b 20
  4324.  dc.b 0
  4325.  dc.b 16,0
  4326.  dc.w 10,-1,0,5
  4327.  dc.w 0,0,0
  4328.  dc.w 1
  4329.  
  4330.  ds.w 4
  4331.  
  4332. ;RocketLauncher
  4333.  
  4334.  dc.w 0
  4335.  dc.b 8,9
  4336.  dc.b 2
  4337.  dc.b 0
  4338.  dc.b 12,0
  4339.  dc.w 30,-1,0,5
  4340.  dc.w 0,0,0
  4341.  dc.w 1
  4342.  
  4343.  
  4344.  ds.w 4
  4345.  
  4346. ; FlameThrower
  4347.  
  4348.  dc.w 90*8
  4349.  dc.b 1,22
  4350.  dc.b 40
  4351.  dc.b 0
  4352.  dc.b 8,$0    
  4353.  dc.w 5,50,1,4
  4354.  dc.w 0,0,0
  4355.  dc.w 1
  4356.  
  4357.  ds.w 4
  4358.  
  4359. ;Grenade launcher
  4360.  
  4361.  
  4362.  dc.w 0
  4363.  dc.b 8,9
  4364.  dc.b 6
  4365.  dc.b 0
  4366.  dc.b 8,0
  4367.  dc.w 50,100,1,5
  4368.  dc.w 60,3
  4369.  dc.w -1000
  4370.  dc.w 1
  4371.  
  4372.  ds.w 4
  4373.  
  4374. ; WORMGUN
  4375.  
  4376.  dc.w 0
  4377.  dc.b 0,0
  4378.  dc.b 0
  4379.  dc.b 0,0
  4380.  dc.w 0,-1,0,5
  4381.  dc.w 0,0
  4382.  dc.w 0
  4383.  dc.w 1
  4384.  ds.w 4
  4385.  
  4386. ; ToughMarineGun
  4387.  
  4388.  dc.w 0
  4389.  dc.b 0,0
  4390.  dc.b 0
  4391.  dc.b 0,0
  4392.  dc.w 0,-1,0,5
  4393.  dc.w 0,0
  4394.  dc.w 0
  4395.  dc.w 1
  4396.  ds.w 4
  4397.  
  4398. ; Shotgun
  4399.  
  4400. ;0
  4401.  dc.w 0
  4402. ;2
  4403.  dc.b 8,21
  4404. ;4
  4405.  dc.b 15
  4406. ;5
  4407.  dc.b -1
  4408. ;6
  4409.  dc.b 4,0
  4410. ;8
  4411.  dc.w 50,-1,1,0
  4412. ;16
  4413.  dc.w 0,0,0
  4414. ;22
  4415.  dc.w 7
  4416.  
  4417.  ds.w 4
  4418.  
  4419.  
  4420.  
  4421. protA: dc.w 0
  4422.  
  4423. Path:
  4424. ; incbin "testpath"
  4425. endpath:
  4426. pathpt: dc.l Path
  4427.  
  4428.  
  4429. PLR1KEYS: dc.b 0
  4430. PLR1PATH: dc.b 0
  4431. PLR1MOUSE: dc.b -1
  4432. PLR1JOY: dc.b 0
  4433. PLR2KEYS: dc.b 0
  4434. PLR2PATH: dc.b 0
  4435. PLR2MOUSE: dc.b -1
  4436. PLR2JOY: dc.b 0
  4437.  
  4438.  even
  4439.  
  4440. PLR1_bobble: dc.w 0
  4441. PLR2_bobble: dc.w 0
  4442. xwobble: dc.l 0
  4443. xwobxoff: dc.w 0
  4444.  
  4445. xwobzoff: dc.w 0
  4446.  
  4447. PLR1_Control:
  4448.  
  4449. ; Take a snapshot of everything.
  4450.  
  4451.  move.l PLR1_xoff,d2
  4452.  move.l d2,PLR1_oldxoff
  4453.  move.l d2,oldx
  4454.  move.l PLR1_zoff,d3
  4455.  move.l d3,PLR1_oldzoff
  4456.  move.l d3,oldz
  4457.  move.l p1_xoff,d0
  4458.  move.l d0,PLR1_xoff
  4459.  move.l d0,newx
  4460.  move.l p1_zoff,d1
  4461.  move.l d1,newz
  4462.  move.l d1,PLR1_zoff
  4463.  
  4464.  move.l p1_height,PLR1_height
  4465.  
  4466.  sub.l d2,d0
  4467.  sub.l d3,d1
  4468.  move.l d0,xdiff
  4469.  move.l d1,zdiff
  4470.  move.w p1_angpos,d0
  4471.  move.w d0,PLR1_angpos
  4472.  
  4473.  move.l #SineTable,a1
  4474.  move.w (a1,d0.w),PLR1_sinval
  4475.  add.w #2048,d0
  4476.  and.w #8190,d0
  4477.  move.w (a1,d0.w),PLR1_cosval
  4478.  
  4479.  move.l p1_yoff,d0
  4480.  move.w p1_bobble,d1
  4481.  move.w (a1,d1.w),d1
  4482.  move.w d1,d3
  4483.  ble.s notnegative
  4484.  neg.w d1
  4485. notnegative:
  4486.  add.w #16384,d1
  4487.  asr.w #4,d1
  4488.  
  4489.  tst.b PLR1_Ducked
  4490.  bne.s .notdouble
  4491.  add.w d1,d1
  4492. .notdouble
  4493.  ext.l d1
  4494.  
  4495.  move.l d1,PLR1_BOBBLEY
  4496.  
  4497.  move.l PLR1_height,d4
  4498.  sub.l d1,d4
  4499.  add.l d1,d0
  4500.  
  4501.  cmp.b #'s',mors
  4502.  beq.s .otherwob
  4503.  asr.w #6,d3
  4504.  ext.l d3
  4505.  move.l d3,xwobble
  4506.  move.w PLR1_sinval,d1
  4507.  muls d3,d1
  4508.  move.w PLR1_cosval,d2
  4509.  muls d3,d2
  4510.  swap d1
  4511.  swap d2
  4512.  asr.w #7,d1
  4513.  move.w d1,xwobxoff
  4514.  asr.w #7,d2
  4515.  neg.w d2
  4516.  move.w d2,xwobzoff
  4517. .otherwob
  4518.  
  4519.  move.l d0,PLR1_yoff
  4520.  move.l d0,newy
  4521.  move.l d0,oldy
  4522.  
  4523.  move.l d4,thingheight
  4524.  move.l #40*256,StepUpVal
  4525.  tst.b PLR1_Ducked
  4526.  beq.s .okbigstep
  4527.  move.l #10*256,StepUpVal
  4528. .okbigstep:
  4529.  
  4530.  move.l #$1000000,StepDownVal
  4531.  
  4532.  move.l PLR1_Roompt,a0
  4533.  move.w ToTelZone(a0),d0
  4534.  blt .noteleport
  4535.  
  4536.  move.w ToTelX(a0),newx
  4537.  move.w ToTelZ(a0),newz
  4538.  move.w #-1,CollId
  4539.  move.l #%111111111111111111,CollideFlags
  4540.  bsr Collision
  4541.  tst.b hitwall
  4542.  beq.s .teleport
  4543.  
  4544.  move.w PLR1_xoff,newx
  4545.  move.w PLR1_zoff,newz
  4546.  bra .noteleport
  4547.  
  4548. .teleport:
  4549.  
  4550.  move.l PLR1_Roompt,a0
  4551.  move.w ToTelZone(a0),d0
  4552.  move.w ToTelX(a0),PLR1_xoff
  4553.  move.w ToTelZ(a0),PLR1_zoff
  4554.  move.l PLR1_yoff,d1
  4555.  sub.l ToZoneFloor(a0),d1
  4556.  move.l ZoneAdds,a0
  4557.  move.l (a0,d0.w*4),a0
  4558.  add.l LEVELDATA,a0
  4559.  move.l a0,PLR1_Roompt
  4560.  add.l ToZoneFloor(a0),d1
  4561.  move.l d1,PLR1s_yoff
  4562.  move.l d1,PLR1_yoff
  4563.  move.l d1,PLR1s_tyoff
  4564.  move.l PLR1_xoff,PLR1s_xoff
  4565.  move.l PLR1_zoff,PLR1s_zoff
  4566.  
  4567.  SAVEREGS
  4568.  move.w #0,Noisex
  4569.  move.w #0,Noisez
  4570.  move.w #26,Samplenum
  4571.  move.w #100,Noisevol
  4572.  move.b #$fa,IDNUM
  4573.  jsr MakeSomeNoise
  4574.  GETREGS
  4575.  
  4576.  bra .cantmove
  4577.  
  4578. .noteleport:
  4579.  
  4580.  move.l PLR1_Roompt,objroom
  4581.  move.w #%100000000,wallflags
  4582.  move.b PLR1_StoodInTop,StoodInTop
  4583.  
  4584.  move.l #%1011111110111000001,CollideFlags
  4585.  move.w #-1,CollId
  4586.  
  4587.  bsr Collision
  4588.  tst.b hitwall
  4589.  beq.s .nothitanything
  4590.  move.w oldx,PLR1_xoff
  4591.  move.w oldz,PLR1_zoff
  4592.  move.l PLR1_xoff,PLR1s_xoff
  4593.  move.l PLR1_zoff,PLR1s_zoff
  4594.  bra .cantmove
  4595. .nothitanything:
  4596.  
  4597.  move.w #40,extlen
  4598.  move.b #0,awayfromwall
  4599.  
  4600.  clr.b exitfirst
  4601.  clr.b wallbounce
  4602.  bsr MoveObject
  4603.  move.b StoodInTop,PLR1_StoodInTop
  4604.  move.l objroom,PLR1_Roompt
  4605.  move.w newx,PLR1_xoff
  4606.  move.w newz,PLR1_zoff
  4607.  move.l PLR1_xoff,PLR1s_xoff
  4608.  move.l PLR1_zoff,PLR1s_zoff
  4609.  
  4610. .cantmove:
  4611.  
  4612.  move.l PLR1_Roompt,a0
  4613.  
  4614.  move.l ToZoneFloor(a0),d0
  4615.  tst.b PLR1_StoodInTop
  4616.  beq.s notintop
  4617.  move.l ToUpperFloor(a0),d0
  4618. notintop:
  4619.  
  4620.  adda.w #ToZonePts,a0
  4621.  sub.l PLR1_height,d0
  4622.  move.l d0,PLR1s_tyoff
  4623.  move.w p1_angpos,tmpangpos
  4624.  
  4625. ; move.l (a0),a0        ; jump to viewpoint list
  4626.  * A0 is pointing at a pointer to list of points to rotate
  4627.  move.w (a0)+,d1
  4628.  ext.l d1
  4629.  add.l PLR1_Roompt,d1
  4630.  move.l d1,PLR1_PointsToRotatePtr
  4631.  tst.w (a0)+
  4632.  sne.s DRAWNGRAPHTOP
  4633.  beq.s nobackgraphics
  4634.  cmp.b #'s',mors
  4635.  beq.s nobackgraphics
  4636.  move.l a0,-(a7)
  4637.  jsr putinbackdrop 
  4638.  move.l (a7)+,a0
  4639. nobackgraphics:
  4640.  adda.w #10,a0
  4641.  move.l a0,PLR1_ListOfGraphRooms
  4642.  
  4643. *************************************************
  4644.  rts
  4645.  
  4646. DRAWNGRAPHTOP
  4647.  dc.w 0 
  4648. tstzone: dc.l 0
  4649. CollId: dc.w 0
  4650.  
  4651. PLR2_Control:
  4652.  
  4653.  PROTLCHECK a0
  4654.  
  4655. ; Take a snapshot of everything.
  4656.  
  4657.  move.l PLR2_xoff,d2
  4658.  move.l d2,PLR2_oldxoff
  4659.  move.l d2,oldx
  4660.  move.l PLR2_zoff,d3
  4661.  move.l d3,PLR2_oldzoff
  4662.  move.l d3,oldz
  4663.  move.l p2_xoff,d0
  4664.  move.l d0,PLR2_xoff
  4665.  move.l d0,newx
  4666.  move.l p2_zoff,d1
  4667.  move.l d1,newz
  4668.  move.l d1,PLR2_zoff
  4669.  
  4670.  move.l p2_height,PLR2_height
  4671.  
  4672.  sub.l d2,d0
  4673.  sub.l d3,d1
  4674.  move.l d0,xdiff
  4675.  move.l d1,zdiff
  4676.  move.w p2_angpos,d0
  4677.  move.w d0,PLR2_angpos
  4678.  
  4679.  move.l #SineTable,a1
  4680.  move.w (a1,d0.w),PLR2_sinval
  4681.  add.w #2048,d0
  4682.  and.w #8190,d0
  4683.  move.w (a1,d0.w),PLR2_cosval
  4684.  
  4685.  move.l p2_yoff,d0
  4686.  move.w p2_bobble,d1
  4687.  move.w (a1,d1.w),d1
  4688.  move.w d1,d3
  4689.  ble.s .notnegative
  4690.  neg.w d1
  4691. .notnegative:
  4692.  add.w #16384,d1
  4693.  asr.w #4,d1
  4694.  add.w d1,d1
  4695.  ext.l d1
  4696.  move.l PLR2_height,d4
  4697.  sub.l d1,d4
  4698.  add.l d1,d0
  4699.  
  4700.  cmp.b #'s',mors
  4701.  bne.s .otherwob
  4702.  asr.w #6,d3
  4703.  ext.l d3
  4704.  move.l d3,xwobble
  4705.  move.w PLR2_sinval,d1
  4706.  muls d3,d1
  4707.  move.w PLR2_cosval,d2
  4708.  muls d3,d2
  4709.  swap d1
  4710.  swap d2
  4711.  asr.w #7,d1
  4712.  move.w d1,xwobxoff
  4713.  asr.w #7,d2
  4714.  neg.w d2
  4715.  move.w d2,xwobzoff
  4716. .otherwob
  4717.  
  4718.  move.l d0,PLR2_yoff
  4719.  move.l d0,newy
  4720.  move.l d0,oldy
  4721.  
  4722.  move.l d4,thingheight
  4723.  move.l #40*256,StepUpVal
  4724.  tst.b PLR2_Ducked
  4725.  beq.s .okbigstep
  4726.  move.l #10*256,StepUpVal
  4727. .okbigstep:
  4728.  
  4729.  move.l #$1000000,StepDownVal
  4730.  
  4731.  move.l PLR2_Roompt,a0
  4732.  move.w ToTelZone(a0),d0
  4733.  blt .noteleport
  4734.  
  4735.  move.w ToTelX(a0),newx
  4736.  move.w ToTelZ(a0),newz
  4737.  move.w #-1,CollId
  4738.  move.l #%111111111111111111,CollideFlags
  4739.  bsr Collision
  4740.  tst.b hitwall
  4741.  beq.s .teleport
  4742.  
  4743.  move.w PLR2_xoff,newx
  4744.  move.w PLR2_zoff,newz
  4745.  bra .noteleport
  4746.  
  4747. .teleport:
  4748.  
  4749.  move.l PLR2_Roompt,a0
  4750.  move.w ToTelZone(a0),d0
  4751.  move.w ToTelX(a0),PLR2_xoff
  4752.  move.w ToTelZ(a0),PLR2_zoff
  4753.  move.l PLR2_yoff,d1
  4754.  sub.l ToZoneFloor(a0),d1
  4755.  move.l ZoneAdds,a0
  4756.  move.l (a0,d0.w*4),a0
  4757.  add.l LEVELDATA,a0
  4758.  move.l a0,PLR2_Roompt
  4759.  add.l ToZoneFloor(a0),d1
  4760.  move.l d1,PLR2s_yoff
  4761.  move.l d1,PLR2_yoff
  4762.  move.l d1,PLR2s_tyoff
  4763.  move.l PLR2_xoff,PLR2s_xoff
  4764.  move.l PLR2_zoff,PLR2s_zoff
  4765.  
  4766.  SAVEREGS
  4767.  move.w #0,Noisex
  4768.  move.w #0,Noisez
  4769.  move.w #26,Samplenum
  4770.  move.w #100,Noisevol
  4771.  move.b #$fa,IDNUM
  4772.  jsr MakeSomeNoise
  4773.  GETREGS
  4774.  
  4775.  bra .cantmove
  4776.  
  4777. .noteleport:
  4778.  
  4779.  move.l PLR2_Roompt,objroom
  4780.  move.w #%100000000000,wallflags
  4781.  move.b PLR2_StoodInTop,StoodInTop
  4782.  
  4783.  move.l #%1011111010111100001,CollideFlags
  4784.  move.w #-1,CollId
  4785.  
  4786.  bsr Collision
  4787.  tst.b hitwall
  4788.  beq.s .nothitanything
  4789.  move.w oldx,PLR2_xoff
  4790.  move.w oldz,PLR2_zoff
  4791.  move.l PLR2_xoff,PLR2s_xoff
  4792.  move.l PLR2_zoff,PLR2s_zoff
  4793.  bra .cantmove
  4794. .nothitanything:
  4795.  
  4796.  move.w #40,extlen
  4797.  move.b #0,awayfromwall
  4798.  
  4799.  clr.b exitfirst
  4800.  clr.b wallbounce
  4801.  bsr MoveObject
  4802.  move.b StoodInTop,PLR2_StoodInTop
  4803.  move.l objroom,PLR2_Roompt
  4804.  move.w newx,PLR2_xoff
  4805.  move.w newz,PLR2_zoff
  4806.  move.l PLR2_xoff,PLR2s_xoff
  4807.  move.l PLR2_zoff,PLR2s_zoff
  4808.  
  4809. .cantmove
  4810.  
  4811.  move.l PLR2_Roompt,a0
  4812.  
  4813.  move.l ToZoneFloor(a0),d0
  4814.  tst.b PLR2_StoodInTop
  4815.  beq.s .notintop
  4816.  move.l ToUpperFloor(a0),d0
  4817. .notintop:
  4818.  
  4819.  adda.w #ToZonePts,a0
  4820.  sub.l PLR2_height,d0
  4821.  move.l d0,PLR2s_tyoff
  4822.  move.w p2_angpos,tmpangpos
  4823.  
  4824. ; move.l (a0),a0        ; jump to viewpoint list
  4825.  * A0 is pointing at a pointer to list of points to rotate
  4826.  move.w (a0)+,d1
  4827.  ext.l d1
  4828.  add.l PLR2_Roompt,d1
  4829.  move.l d1,PLR2_PointsToRotatePtr
  4830.  tst.w (a0)+
  4831.  beq.s .nobackgraphics
  4832.  cmp.b #'s',mors
  4833.  bne.s .nobackgraphics
  4834.  move.l a0,-(a7)
  4835.  jsr putinbackdrop 
  4836.  move.l (a7)+,a0
  4837. .nobackgraphics:
  4838.  adda.w #10,a0
  4839.  move.l a0,PLR2_ListOfGraphRooms
  4840.  
  4841. *****************************************************
  4842.  
  4843.  rts
  4844.  
  4845.  
  4846. KeyMap: ds.b 256
  4847.  
  4848. fillscrnwater:
  4849.  dc.w 0
  4850. DONTDOGUN:
  4851.  dc.w 0
  4852.  
  4853. temptemp: ds.l 200
  4854. temptempptr: dc.l 0
  4855.  
  4856. DrawDisplay:
  4857.  
  4858.  move.l #temptemp,temptempptr
  4859.  
  4860.  clr.b fillscrnwater
  4861.  
  4862.  move.l #SineTable,a0
  4863.  move.w angpos,d0
  4864.  move.w (a0,d0.w),d6
  4865.  adda.w #2048,a0
  4866.  move.w (a0,d0.w),d7
  4867.  move.w d6,sinval
  4868.  move.w d7,cosval
  4869.  
  4870.  move.l #KeyMap,a5
  4871.  moveq #0,d5
  4872.  move.b look_behind_key,d5
  4873.  tst.b (a5,d5.w)
  4874.  sne DONTDOGUN
  4875.  beq.s .nolookback
  4876.  neg.w cosval
  4877.  neg.w sinval
  4878. .nolookback:
  4879.  
  4880.  
  4881.  move.l yoff,d0
  4882.  asr.l #8,d0
  4883.  move.w d0,d1
  4884.  add.w #256-32,d1
  4885.  and.w #255,d1
  4886.  move.w d1,wallyoff
  4887.  move.l yoff,d0
  4888.  asr.l #6,d0
  4889.  move.w d0,flooryoff
  4890.  
  4891.  move.w xoff,d6
  4892.  move.w d6,d3
  4893.  asr.w #1,d3
  4894.  add.w d3,d6
  4895.  asr.w #1,d6
  4896.  move.w d6,xoff34
  4897.  
  4898.  move.w zoff,d6
  4899.  move.w d6,d3
  4900.  asr.w #1,d3
  4901.  add.w d3,d6
  4902.  asr.w #1,d6
  4903.  move.w d6,zoff34
  4904.  
  4905.  bsr RotateLevelPts
  4906.  bsr RotateObjectPts
  4907.  bsr CalcPLR1InLine
  4908.  
  4909.  
  4910.  cmp.b #'n',mors
  4911.  bne.s doplr2too
  4912.  move.l PLR2_Obj,a0
  4913.  move.w #-1,12(a0)
  4914.  move.w #-1,GraphicRoom(a0)
  4915.  bra noplr2either
  4916.  
  4917. doplr2too:
  4918.  bsr CalcPLR2InLine
  4919. noplr2either:
  4920.  
  4921.  move.l endoflist,a0
  4922. subroomloop:
  4923.  move.w -(a0),d7
  4924.  blt jumpoutofrooms
  4925.  
  4926. ; bsr setlrclip
  4927. ; move.w leftclip,d0
  4928. ; cmp.w rightclip,d0
  4929. ; bge subroomloop
  4930.  move.l a0,-(a7)
  4931.  
  4932.  move.l ZoneAdds,a0
  4933.  move.l (a0,d7.w*4),a0
  4934.  add.l LEVELDATA,a0
  4935.  move.l ToZoneRoof(a0),SplitHeight
  4936.  move.l a0,ROOMBACK
  4937.  
  4938.  move.l ZoneGraphAdds,a0
  4939.  move.l 4(a0,d7.w*8),a2
  4940.  move.l (a0,d7.w*8),a0
  4941.  
  4942.  add.l LEVELGRAPHICS,a0
  4943.  add.l LEVELGRAPHICS,a2
  4944.  move.l a2,ThisRoomToDraw+4
  4945.  move.l a0,ThisRoomToDraw
  4946.  
  4947.  move.l ListOfGraphRooms,a1
  4948.  
  4949.  
  4950.  
  4951. finditit:
  4952.  tst.w (a1)
  4953.  blt nomoretodoatall
  4954.  cmp.w (a1),d7
  4955.  beq outoffind
  4956.  adda.w #8,a1
  4957.  bra finditit
  4958.  
  4959. outoffind:
  4960.  
  4961.  move.l a1,-(a7)
  4962.  
  4963.  
  4964.  move.w #0,leftclip
  4965.  move.w RIGHTX,rightclip
  4966.  moveq #0,d7
  4967.  move.w 2(a1),d7
  4968.  blt.s outofrcliplop
  4969.  move.l LEVELCLIPS,a0
  4970.  lea (a0,d7.l*2),a0
  4971.  
  4972.  tst.w (a0)
  4973.  blt outoflcliplop
  4974.  
  4975.  bsr NEWsetlclip
  4976.  
  4977. intolcliplop:        ; clips
  4978.  tst.w (a0)
  4979.  blt outoflcliplop
  4980.  
  4981.  bsr NEWsetlclip 
  4982.  bra intolcliplop
  4983.  
  4984. outoflcliplop:
  4985.  
  4986.  addq #2,a0
  4987.  
  4988.  tst.w (a0)
  4989.  blt outofrcliplop
  4990.  
  4991.  bsr NEWsetrclip
  4992.  
  4993. intorcliplop:        ; clips
  4994.  tst.w (a0)
  4995.  blt outofrcliplop
  4996.  
  4997.  bsr NEWsetrclip 
  4998.  bra intorcliplop
  4999.  
  5000. outofrcliplop:
  5001.  
  5002.  
  5003.  move.w leftclip,d0
  5004.  cmp.w RIGHTX,d0
  5005.  bge dontbothercantseeit
  5006.  move.w rightclip,d1
  5007.  blt dontbothercantseeit
  5008.  cmp.w d1,d0
  5009.  bge dontbothercantseeit
  5010.  
  5011.  move.l yoff,d0
  5012.  cmp.l SplitHeight,d0
  5013.  blt botfirst
  5014.  
  5015.  move.l ThisRoomToDraw+4,a0
  5016.  cmp.l LEVELGRAPHICS,a0
  5017.  beq.s noupperroom
  5018.  st DOUPPER
  5019.  
  5020.  move.l ROOMBACK,a1
  5021.  move.l ToUpperRoof(a1),TOPOFROOM
  5022.  move.l ToUpperFloor(a1),BOTOFROOM
  5023.  
  5024.  move.l #CurrentPointBrights+4,PointBrightsPtr
  5025.  bsr dothisroom
  5026. noupperroom:
  5027.  move.l ThisRoomToDraw,a0
  5028.  clr.b DOUPPER
  5029.  move.l #CurrentPointBrights,PointBrightsPtr
  5030.  
  5031.  move.l ROOMBACK,a1
  5032.  move.l ToZoneRoof(a1),d0
  5033.  move.l d0,TOPOFROOM
  5034.  move.l ToZoneFloor(a1),d1
  5035.  move.l d1,BOTOFROOM
  5036.  
  5037.  move.l ToZoneWater(a1),d2
  5038.  cmp.l yoff,d2
  5039.  blt.s .abovefirst
  5040.  move.l d2,BEFOREWATTOP
  5041.  move.l d1,BEFOREWATBOT
  5042.  move.l d2,AFTERWATBOT
  5043.  move.l d0,AFTERWATTOP
  5044.  bra.s .belowfirst
  5045. .abovefirst:
  5046.  move.l d0,BEFOREWATTOP
  5047.  move.l d2,BEFOREWATBOT
  5048.  move.l d1,AFTERWATBOT
  5049.  move.l d2,AFTERWATTOP
  5050. .belowfirst:
  5051.  
  5052.  bsr dothisroom
  5053.  
  5054.  bra dontbothercantseeit
  5055. botfirst:
  5056.  
  5057.  move.l ThisRoomToDraw,a0
  5058.  clr.b DOUPPER
  5059.  move.l #CurrentPointBrights,PointBrightsPtr
  5060.  
  5061.  move.l ROOMBACK,a1
  5062.  move.l ToZoneRoof(a1),d0
  5063.  move.l d0,TOPOFROOM
  5064.  move.l ToZoneFloor(a1),d1
  5065.  move.l d1,BOTOFROOM
  5066.  
  5067.  move.l ToZoneWater(a1),d2
  5068.  cmp.l yoff,d2
  5069.  blt.s .abovefirst
  5070.  move.l d2,BEFOREWATTOP
  5071.  move.l d1,BEFOREWATBOT
  5072.  move.l d2,AFTERWATBOT
  5073.  move.l d0,AFTERWATTOP
  5074.  bra.s .belowfirst
  5075. .abovefirst:
  5076.  move.l d0,BEFOREWATTOP
  5077.  move.l d2,BEFOREWATBOT
  5078.  move.l d1,AFTERWATBOT
  5079.  move.l d2,AFTERWATTOP
  5080. .belowfirst:
  5081.  
  5082.  
  5083.  bsr dothisroom
  5084.  move.l ThisRoomToDraw+4,a0
  5085.  cmp.l LEVELGRAPHICS,a0
  5086.  beq.s noupperroom2
  5087.  move.l #CurrentPointBrights+4,PointBrightsPtr
  5088.  
  5089.  move.l ROOMBACK,a1
  5090.  move.l ToUpperRoof(a1),TOPOFROOM
  5091.  move.l ToUpperFloor(a1),BOTOFROOM
  5092.  
  5093.  st DOUPPER
  5094.  bsr dothisroom
  5095. noupperroom2:
  5096.  
  5097. dontbothercantseeit:
  5098. pastemp:
  5099.  
  5100.  move.l (a7)+,a1
  5101.  move.l ThisRoomToDraw,a0
  5102.  move.w (a0),d7
  5103.  
  5104.  adda.w #8,a1
  5105.  bra finditit
  5106.  
  5107. nomoretodoatall:
  5108.  
  5109.  move.l (a7)+,a0
  5110.  
  5111.  bra subroomloop
  5112.  
  5113. jumpoutofrooms:
  5114.  
  5115.  tst.b DONTDOGUN
  5116.  bne NOGUNLOOK
  5117.  
  5118.  cmp.b #'s',mors
  5119.  beq.s drawslavegun
  5120.  
  5121.  moveq #0,d0
  5122.  move.b PLR1_GunSelected,d0
  5123.  moveq #0,d1
  5124.  move.b PLR1_GunFrame,d1
  5125. ; bsr DRAWINGUN
  5126.  bra drawngun
  5127.  
  5128. drawslavegun
  5129.  moveq #0,d0
  5130.  move.b PLR2_GunSelected,d0
  5131.  moveq #0,d1
  5132.  move.b PLR2_GunFrame,d1
  5133. ; bsr DRAWINGUN
  5134.  
  5135. drawngun:
  5136.  
  5137. NOGUNLOOK:
  5138.  
  5139.  moveq #0,d1
  5140.  move.b PLR1_GunFrame,d1
  5141.  sub.w TempFrames,d1
  5142.  bgt.s .nn
  5143.  moveq #0,d1
  5144. .nn
  5145.  move.b d1,PLR1_GunFrame
  5146.  
  5147.  ble.s .donefire
  5148.  sub.b #1,PLR1_GunFrame
  5149. .donefire:
  5150.  
  5151.  moveq #0,d1
  5152.  move.b PLR2_GunFrame,d1
  5153.  sub.w TempFrames,d1
  5154.  bgt.s .nn2
  5155.  moveq #0,d1
  5156. .nn2
  5157.  move.b d2,PLR2_GunFrame
  5158.  
  5159.  ble.s .donefire2
  5160.  sub.b #1,PLR2_GunFrame
  5161. .donefire2:
  5162.  
  5163.  tst.b DOANYWATER
  5164.  beq.s nowaterfull
  5165.  
  5166.  move.w #239,d0
  5167.  move.l FASTBUFFER,a0
  5168.  tst.b fillscrnwater
  5169.  beq nowaterfull
  5170.  bgt oknothalf
  5171.  moveq #119,d0
  5172.  add.l #320*120*2,a0
  5173. oknothalf:
  5174.  
  5175.  bclr.b #1,$bfe001
  5176.  
  5177.  move.l #brightentab+512*4,a2
  5178.  moveq #0,d2
  5179.  
  5180. fw:
  5181.  move.w #287,d1
  5182. fwa:
  5183.  move.b (a0),d2
  5184.  move.w (a2,d2.w*2),(a0)+
  5185.  dbra d1,fwa
  5186.  add.w #32*2,a0
  5187.  dbra d0,fw
  5188.  
  5189. ; move.l frompt,a0
  5190. ; add.l #104*4*60,a0
  5191. ; move.w #31,d0
  5192. ;fw:
  5193. ; move.w d5,d1
  5194. ; move.l a0,a1
  5195. ;fwd:
  5196. ;val SET 104*4*19
  5197. ; REPT 20
  5198. ; and.w #$ff,val(a1)
  5199. ;val SET val-104*4
  5200. ; ENDR
  5201. ; sub.l #104*4*20,a1
  5202. ; dbra d1,fwd
  5203. ; addq #4,a0
  5204. ; dbra d0,fw
  5205. ;
  5206. ; addq #4,a0
  5207. ;
  5208. ; move.w #31,d0
  5209. ;sw:
  5210. ; move.w d5,d1
  5211. ; move.l a0,a1
  5212. ;swd:
  5213. ;val SET 104*4*19
  5214. ; REPT 20
  5215. ; and.w #$ff,val(a1)
  5216. ;val SET val-104*4
  5217. ; ENDR
  5218. ; sub.l #104*4*20,a1
  5219. ; dbra d1,swd
  5220. ; addq #4,a0
  5221. ; dbra d0,sw
  5222. ;
  5223. ; addq #4,a0
  5224. ;
  5225. ; move.w #31,d0
  5226. ;tw:
  5227. ; move.w d5,d1
  5228. ; move.l a0,a1
  5229. ;twd:
  5230. ;val SET 104*4*19
  5231. ; REPT 20
  5232. ; and.w #$ff,val(a1)
  5233. ;val SET val-104*4
  5234. ; ENDR
  5235. ; sub.l #104*4*20,a1
  5236. ; dbra d1,twd
  5237. ; addq #4,a0
  5238. ; dbra d0,tw
  5239. ;
  5240.  rts
  5241.  
  5242. nowaterfull:
  5243.  bset.b #1,$bfe001
  5244.  rts
  5245.  
  5246. prot9: dc.w 0
  5247.  
  5248. TempBuffer: ds.l 100 
  5249.  
  5250. prot8: dc.w 0
  5251.  
  5252. ClipTable: ds.l 30
  5253. EndOfClipPt: dc.l 0
  5254. DOUPPER: dc.w 0
  5255.  
  5256. RealTable:
  5257.  dc.l prot1-78935450
  5258.  dc.l prot2-78935450
  5259.  dc.l prot3-78935450
  5260.  dc.l prot4-78935450
  5261.  dc.l prot5-78935450
  5262.  dc.l prot6-78935450
  5263.  dc.l prot7-78935450
  5264.  dc.l prot8-78935450
  5265.  dc.l prot9-78935450
  5266.  dc.l protA-78935450
  5267.  
  5268. dothisroom
  5269.  
  5270.  move.w (a0)+,d0
  5271.  move.w d0,currzone
  5272.  move.w d0,d1
  5273.  muls #40,d1
  5274.  add.l #BIGMAP,d1
  5275.  move.l d1,BIGPTR
  5276.  move.w d0,d1
  5277.  ext.l d1
  5278.  asl.w #2,d1
  5279.  add.l #COMPACTMAP,d1
  5280.  move.l d1,COMPACTPTR
  5281.  add.l #4,d1
  5282.  cmp.l LASTZONE,d1
  5283.  ble.s .nochange
  5284.  move.l d1,LASTZONE
  5285. .nochange:
  5286.  
  5287.  move.l #ZoneBrightTable,a1
  5288.  move.l (a1,d0.w*4),d1
  5289.  tst.b DOUPPER
  5290.  bne.s .okbot
  5291.  swap d1
  5292. .okbot:
  5293.  move.w d1,ZoneBright
  5294.  
  5295. polyloop:
  5296.  move.w (a0)+,d0
  5297.  move.w d0,WALLIDENT
  5298.  and.w #$ff,d0
  5299.  tst.b d0
  5300.  blt jumpoutofloop
  5301.  beq itsawall
  5302.  cmp.w #3,d0
  5303.  beq itsasetclip
  5304.  blt itsafloor
  5305.  cmp.w #4,d0
  5306.  beq itsanobject
  5307.  cmp.w #5,d0
  5308.  beq itsanarc
  5309.  cmp.w #6,d0
  5310.  beq itsalightbeam
  5311.  cmp.w #7,d0
  5312.  beq.s itswater
  5313.  cmp.w #9,d0
  5314.  ble itsachunkyfloor
  5315.  cmp.w #11,d0
  5316.  ble itsabumpyfloor
  5317.  cmp.w #12,d0
  5318.  beq.s itsbackdrop
  5319.  cmp.w #13,d0
  5320.  beq.s itsaseewall
  5321.  
  5322.  bra polyloop
  5323.  
  5324. itsaseewall:
  5325.  st seethru
  5326.  jsr itsawalldraw
  5327.  bra polyloop
  5328.  
  5329. itsbackdrop:
  5330.  jsr putinbackdrop
  5331.  bra polyloop
  5332.  
  5333. itswater:
  5334.  PROTHCHECK
  5335.  move.w #2,SMALLIT
  5336.  move.w #3,d0
  5337.  clr.b gourfloor
  5338.  move.l #FloorLine,LineToUse
  5339.  st usewater
  5340.  clr.b usebumps
  5341.  jsr itsafloordraw
  5342.  bra polyloop
  5343.  
  5344. itsanarc:
  5345.  jsr CurveDraw
  5346.  bra polyloop
  5347.  
  5348. itsanobject:
  5349.  jsr ObjDraw
  5350.  bra polyloop
  5351.  
  5352. itsalightbeam:
  5353.  jsr LightDraw
  5354.  bra polyloop
  5355.  
  5356. itsabumpyfloor:
  5357.  move.w #1,SMALLIT
  5358.  sub.w #9,d0
  5359.  st usebumps
  5360.  st smoothbumps
  5361.  clr.b usewater
  5362.  move.l #BumpLine,LineToUse
  5363.  jsr itsafloordraw
  5364.  bra polyloop
  5365.  
  5366. itsachunkyfloor:
  5367.  move.w #1,SMALLIT
  5368.  subq.w #7,d0
  5369.  st usebumps
  5370.  sub.w #12,topclip
  5371. ; add.w #10,botclip
  5372.  clr.b smoothbumps
  5373.  clr.b usewater
  5374.  move.l #BumpLine,LineToUse
  5375.  jsr itsafloordraw
  5376.  add.w #12,topclip
  5377. ; sub.w #10,botclip
  5378.  bra polyloop 
  5379.  
  5380. itsafloor:
  5381.  
  5382.  move.l PointBrightsPtr,FloorPtBrights
  5383.  
  5384.  move.w currzone,d1
  5385.  muls #80,d1
  5386.  
  5387.  cmp.w #2,d0
  5388.  bne.s .nfl
  5389.  add.l #2,d1
  5390. .nfl
  5391.  add.l d1,FloorPtBrights
  5392.  
  5393.  move.w #1,SMALLIT
  5394.  
  5395.  movem.l a0/d0,-(a7)
  5396.  move.l $4.w,a6
  5397.  jsr _LVOSuperState(a6)
  5398.  move.l d0,SSTACK
  5399.  movem.l (a7)+,a0/d0
  5400.  
  5401.  move.l #FloorLine,LineToUse
  5402. * 1,2 = floor/roof
  5403.  clr.b usewater
  5404.  clr.b usebumps
  5405.  move.b GOURSEL,gourfloor    
  5406.  jsr itsafloordraw
  5407.  move.l a0,-(a7)
  5408.  move.l $4.w,a6
  5409.  move.l SSTACK,d0
  5410.  jsr _LVOUserState(a6)
  5411.  move.l (a7)+,a0
  5412.  bra polyloop
  5413. itsasetclip:
  5414.  bra polyloop
  5415. itsawall:
  5416.  clr.b seethru
  5417. ; move.l #stripbuffer,a1
  5418.  jsr itsawalldraw
  5419.  bra polyloop
  5420.  
  5421. jumpoutofloop:
  5422.  rts
  5423.  
  5424. LASTZONE: dc.l 0
  5425. COMPACTPTR: dc.l 0
  5426. BIGPTR: dc.l 0
  5427. WALLIDENT: dc.w 0
  5428. SMALLIT: dc.w 0
  5429. GOURSEL: dc.w 0
  5430. ThisRoomToDraw: dc.l 0,0
  5431. SplitHeight: dc.l 0
  5432.  
  5433.  include "ab3:source_4000/OrderZones"
  5434.  
  5435. ReadMouse:
  5436.  move.l #$dff000,a6
  5437.  clr.l d0
  5438.  clr.l d1
  5439.  move.w $a(a6),d0
  5440.  lsr.w #8,d0
  5441.  ext.l d0
  5442.  move.w d0,d3
  5443.  move.w oldmy,d2
  5444.  sub.w d2,d0
  5445.  
  5446.  cmp.w #127,d0
  5447.  blt nonegy
  5448.  move.w #255,d1
  5449.  sub.w d0,d1
  5450.  move.w d1,d0
  5451.  neg.w d0
  5452. nonegy:
  5453.  
  5454.  cmp.w #-127,d0
  5455.  bge nonegy2
  5456.  move.w #255,d1
  5457.  add.w d0,d1
  5458.  move.w d1,d0
  5459. nonegy2:
  5460.  
  5461.  add.b d0,d2
  5462.  add.w d0,oldy2
  5463.  move.w d2,oldmy
  5464.  move.w d2,d0
  5465.  
  5466.  move.w oldy2,d0
  5467.  move.w d0,ymouse
  5468.  
  5469.  clr.l d0
  5470.  clr.l d1
  5471.  move.w $a(a6),d0
  5472.  ext.w d0
  5473.  ext.l d0
  5474.  move.w d0,d3
  5475.  move.w oldmx,d2
  5476.  sub.w d2,d0
  5477.  
  5478.  cmp.w #127,d0
  5479.  blt nonegx
  5480.  move.w #255,d1
  5481.  sub.w d0,d1
  5482.  move.w d1,d0
  5483.  neg.w d0
  5484. nonegx:
  5485.  
  5486.  cmp.w #-127,d0
  5487.  bge nonegx2
  5488.  move.w #255,d1
  5489.  add.w d0,d1
  5490.  move.w d1,d0
  5491. nonegx2:
  5492.  
  5493.  add.b d0,d2
  5494.  move.w d0,d1
  5495.  move.w d2,oldmx
  5496.  
  5497.  move.w #$0,$dff034
  5498.  
  5499.  add.w d0,oldx2
  5500.  move.w oldx2,d0
  5501.  and.w #2047,d0
  5502.  move.w d0,oldx2
  5503.  
  5504.  asl.w #2,d0
  5505.  sub.w prevx,d0
  5506.  add.w d0,prevx
  5507.  add.w d0,angpos
  5508.  move.w #0,lrs
  5509.  rts
  5510.  
  5511. noturn:
  5512.  
  5513. ; got to move lr instead. 
  5514.  
  5515. ; d1 = speed moved l/r
  5516.  
  5517.  move.w d1,lrs
  5518.  
  5519.  rts
  5520.  
  5521. lrs: dc.w 0
  5522. prevx: dc.w 0
  5523.  
  5524. angpos: dc.w 0
  5525. mang: dc.w 0
  5526. oldymouse: dc.w 0
  5527. xmouse: dc.w 0
  5528. ymouse: dc.w 0
  5529. oldx2: dc.w 0
  5530. oldmx: dc.w 0
  5531. oldmy: dc.w 0
  5532. oldy2: dc.w 0
  5533.  
  5534. MAPON: dc.w $ffff
  5535.  
  5536. RotateLevelPts:
  5537.  
  5538.  tst.b MAPON
  5539.  beq ONLYTHELONELY
  5540.  
  5541.  move.w sinval,d6
  5542.  swap d6
  5543.  move.w cosval,d6
  5544.  move.l Points,a3
  5545.  move.l #Rotated,a1
  5546.  move.l #OnScreen,a2
  5547.  move.w xoff,d4
  5548.  move.w zoff,d5
  5549.  
  5550. ; move.w #$c40,$dff106
  5551. ; move.w #$f00,$dff180
  5552.  
  5553.  move.w NumLevPts,d7
  5554.  
  5555.  tst.b FULLSCR
  5556.  bne BIGALL
  5557.  
  5558. pointrotlop2:
  5559.  move.w (a3)+,d0
  5560.  sub.w d4,d0
  5561.  move.w d0,d2
  5562.  move.w (a3)+,d1
  5563.  sub.w d5,d1
  5564.  muls d6,d2
  5565.  swap d6
  5566.  move.w d1,d3
  5567.  muls d6,d3
  5568.  sub.l d3,d2
  5569.  add.l d2,d2
  5570.  swap d2
  5571.  ext.l d2
  5572.  asl.l #7,d2
  5573.  add.l xwobble,d2
  5574.  move.l d2,(a1)+
  5575.  
  5576.  muls d6,d0
  5577.  swap d6
  5578.  muls d6,d1
  5579.  add.l d0,d1
  5580.  asl.l #1,d1
  5581.  swap d1
  5582. ; ext.l d1
  5583. ; divs #3,d1
  5584.  move.l d1,(a1)+
  5585.  
  5586.  tst.w d1
  5587.  bgt.s ptnotbehind
  5588.  tst.w d2
  5589.  bgt.s onrightsomewhere
  5590.  move.w #0,d2
  5591.  bra putin
  5592. onrightsomewhere:
  5593.  move.w RIGHTX,d2
  5594.  bra putin
  5595. ptnotbehind:
  5596.  
  5597.  divs d1,d2
  5598.  add.w MIDDLEX,d2
  5599. putin:
  5600.  move.w d2,(a2)+
  5601.  
  5602.  dbra d7,pointrotlop2
  5603. outofpointrot:
  5604.   rts
  5605.  
  5606.  
  5607. BIGALL:
  5608.  
  5609. pointrotlop2B:
  5610.  move.w (a3)+,d0
  5611.  sub.w d4,d0
  5612.  move.w d0,d2
  5613.  move.w (a3)+,d1
  5614.  sub.w d5,d1
  5615.  muls d6,d2
  5616.  swap d6
  5617.  move.w d1,d3
  5618.  muls d6,d3
  5619.  sub.l d3,d2
  5620.  add.l d2,d2
  5621.  swap d2
  5622.  ext.l d2
  5623.  asl.l #7,d2
  5624.  add.l xwobble,d2
  5625.  move.l d2,(a1)+
  5626.  
  5627.  muls d6,d0
  5628.  swap d6
  5629.  muls d6,d1
  5630.  add.l d0,d1
  5631.  asl.l #2,d1
  5632.  swap d1
  5633.  ext.l d1
  5634.  divs #3,d1
  5635.  move.l d1,(a1)+
  5636.  
  5637.  tst.w d1
  5638.  bgt.s ptnotbehindB
  5639.  tst.w d2
  5640.  bgt.s onrightsomewhereB
  5641.  move.w #0,d2
  5642.  bra putinB
  5643. onrightsomewhereB:
  5644.  move.w RIGHTX,d2
  5645.  bra putinB
  5646. ptnotbehindB:
  5647.  
  5648.  divs d1,d2
  5649.  add.w MIDDLEX,d2
  5650. putinB:
  5651.  move.w d2,(a2)+
  5652.  
  5653.  dbra d7,pointrotlop2B
  5654.   rts
  5655.  
  5656.  
  5657. ONLYTHELONELY:
  5658.  
  5659.  move.w sinval,d6
  5660.  swap d6
  5661.  move.w cosval,d6
  5662.  
  5663.  move.l PointsToRotatePtr,a0
  5664.  move.l Points,a3
  5665.  move.l #Rotated,a1
  5666.  move.l #OnScreen,a2
  5667.  move.w xoff,d4
  5668.  move.w zoff,d5
  5669.  
  5670. ; move.w #$c40,$dff106
  5671. ; move.w #$f00,$dff180
  5672.  
  5673.  tst.b FULLSCR
  5674.  bne BIGLONELY
  5675.  
  5676. pointrotlop:
  5677.  move.w (a0)+,d7
  5678.  blt outofpointrot
  5679.  
  5680.  move.w (a3,d7*4),d0
  5681.  sub.w d4,d0
  5682.  move.w d0,d2
  5683.  move.w 2(a3,d7*4),d1
  5684.  sub.w d5,d1
  5685.  muls d6,d2
  5686.  swap d6
  5687.  move.w d1,d3
  5688.  muls d6,d3
  5689.  sub.l d3,d2
  5690.  add.l d2,d2
  5691.  swap d2
  5692.  ext.l d2
  5693.  asl.l #7,d2
  5694.  add.l xwobble,d2
  5695.  move.l d2,(a1,d7*8)
  5696.  
  5697.  muls d6,d0
  5698.  swap d6
  5699.  muls d6,d1
  5700.  add.l d0,d1
  5701.  asl.l #1,d1
  5702.  swap d1
  5703. ; ext.l d1
  5704. ; divs #3,d1
  5705.  move.l d1,4(a1,d7*8)
  5706.  
  5707.  tst.w d1
  5708.  bgt.s .ptnotbehind
  5709.  tst.w d2
  5710.  bgt.s .onrightsomewhere
  5711.  move.w #0,d2
  5712.  bra .putin
  5713. .onrightsomewhere:
  5714.  move.w RIGHTX,d2
  5715.  bra .putin
  5716. .ptnotbehind:
  5717.  
  5718.  divs d1,d2
  5719.  add.w MIDDLEX,d2
  5720. .putin:
  5721.  move.w d2,(a2,d7*2)
  5722.  
  5723.  bra pointrotlop
  5724.  
  5725. ; move.w #$c40,$dff106
  5726. ; move.w #$ff0,$dff180
  5727.  
  5728.  rts
  5729.  
  5730. BIGLONELY:
  5731.  
  5732. .pointrotlop:
  5733.  move.w (a0)+,d7
  5734.  blt.s .outofpointrot
  5735.  
  5736.  move.w (a3,d7*4),d0
  5737.  sub.w d4,d0
  5738.  move.w d0,d2
  5739.  move.w 2(a3,d7*4),d1
  5740.  sub.w d5,d1
  5741.  muls d6,d2
  5742.  swap d6
  5743.  move.w d1,d3
  5744.  muls d6,d3
  5745.  sub.l d3,d2
  5746.  add.l d2,d2
  5747.  swap d2
  5748.  ext.l d2
  5749.  asl.l #7,d2
  5750.  add.l xwobble,d2
  5751.  move.l d2,(a1,d7*8)
  5752.  
  5753.  muls d6,d0
  5754.  swap d6
  5755.  muls d6,d1
  5756.  add.l d0,d1
  5757.  asl.l #2,d1
  5758.  swap d1
  5759.  ext.l d1
  5760.  divs #3,d1
  5761.  move.l d1,4(a1,d7*8)
  5762.  
  5763.  tst.w d1
  5764.  bgt.s .ptnotbehind
  5765.  tst.w d2
  5766.  bgt.s .onrightsomewhere
  5767.  move.w #0,d2
  5768.  bra .putin
  5769. .onrightsomewhere:
  5770.  move.w RIGHTX,d2
  5771.  bra .putin
  5772. .ptnotbehind:
  5773.  
  5774.  divs d1,d2
  5775.  add.w MIDDLEX,d2
  5776. .putin:
  5777.  move.w d2,(a2,d7*2)
  5778.  
  5779.  bra .pointrotlop
  5780.  
  5781. .outofpointrot:
  5782. ; move.w #$c40,$dff106
  5783. ; move.w #$ff0,$dff180
  5784.  
  5785.  rts
  5786.  
  5787.  
  5788. PLR1_ObjDists
  5789.  ds.w 250
  5790. PLR2_ObjDists
  5791.  ds.w 250
  5792.  
  5793. CalcPLR1InLine:
  5794.  
  5795.  move.w PLR1_sinval,d5
  5796.  move.w PLR1_cosval,d6
  5797.  move.l ObjectData,a4
  5798.  move.l ObjectPoints,a0
  5799.  move.w NumObjectPoints,d7
  5800.  move.l #PLR1_ObsInLine,a2
  5801.  move.l #PLR1_ObjDists,a3
  5802.  
  5803. .objpointrotlop:
  5804.  
  5805.  cmp.b #3,16(a4)
  5806.  beq.s .itaux
  5807.  
  5808.  move.w (a0),d0
  5809.  sub.w PLR1_xoff,d0
  5810.  move.w 4(a0),d1
  5811.  addq #8,a0
  5812.  
  5813.  tst.w 12(a4)
  5814.  blt .noworkout
  5815.  
  5816.  moveq #0,d2
  5817.  move.b 16(a4),d2
  5818.  ;move.l #ColBoxTable,a6
  5819.  ;lea (a6,d2.w*8),a6
  5820.  
  5821.  sub.w PLR1_zoff,d1
  5822.  move.w d0,d2
  5823.  muls d6,d2
  5824.  move.w d1,d3
  5825.  muls d5,d3
  5826.  sub.l d3,d2
  5827.  add.l d2,d2
  5828.  
  5829.  bgt.s .okh
  5830.  neg.l d2
  5831. .okh:
  5832.  swap d2
  5833.  
  5834.  muls d5,d0
  5835.  muls d6,d1
  5836.  add.l d0,d1
  5837.  asl.l #2,d1
  5838.  swap d1
  5839.  moveq #0,d3
  5840.  
  5841.  tst.w d1
  5842.  ble.s .notinline
  5843.  asr.w #1,d2
  5844.  cmp.w #80,d2
  5845.  bgt.s .notinline
  5846.  
  5847.  st d3
  5848. .notinline
  5849.  move.b d3,(a2)+
  5850.  
  5851.  move.w d1,(a3)+
  5852.  
  5853.  add.w #64,a4
  5854.  dbra d7,.objpointrotlop
  5855.  
  5856.  rts
  5857.  
  5858. .itaux:
  5859.  add.w #64,a4
  5860.  bra .objpointrotlop
  5861.  
  5862.  
  5863. .noworkout:
  5864.  move.b #0,(a2)+
  5865.  move.w #0,(a3)+
  5866.  add.w #64,a4
  5867.  dbra d7,.objpointrotlop
  5868.  rts
  5869.  
  5870.  
  5871. CalcPLR2InLine:
  5872.  
  5873.  move.w PLR2_sinval,d5
  5874.  move.w PLR2_cosval,d6
  5875.  move.l ObjectData,a4
  5876.  move.l ObjectPoints,a0
  5877.  move.w NumObjectPoints,d7
  5878.  move.l #PLR2_ObsInLine,a2
  5879.  move.l #PLR2_ObjDists,a3
  5880.  
  5881. .objpointrotlop:
  5882.  
  5883.  move.w (a0),d0
  5884.  sub.w PLR2_xoff,d0
  5885.  move.w 4(a0),d1
  5886.  addq #8,a0
  5887.  
  5888.  tst.w 12(a4)
  5889.  blt .noworkout
  5890.  
  5891.  moveq #0,d2
  5892.  move.b 16(a4),d2
  5893.  move.l #ColBoxTable,a6
  5894.  lea (a6,d2.w*8),a6
  5895.  
  5896.  sub.w PLR2_zoff,d1
  5897.  move.w d0,d2
  5898.  muls d6,d2
  5899.  move.w d1,d3
  5900.  muls d5,d3
  5901.  sub.l d3,d2
  5902.  add.l d2,d2
  5903.  
  5904.  bgt.s .okh
  5905.  neg.l d2
  5906. .okh:
  5907.  swap d2
  5908.  
  5909.  muls d5,d0
  5910.  muls d6,d1
  5911.  add.l d0,d1
  5912.  asl.l #2,d1
  5913.  swap d1
  5914.  moveq #0,d3
  5915.  
  5916.  tst.w d1
  5917.  ble.s .notinline
  5918.  asr.w #1,d2
  5919.  cmp.w (a6),d2
  5920.  bgt.s .notinline
  5921.  
  5922.  st d3
  5923. .notinline
  5924.  move.b d3,(a2)+
  5925.  
  5926.  move.w d1,(a3)+
  5927.  
  5928.  add.w #64,a4
  5929.  dbra d7,.objpointrotlop
  5930.  
  5931.  rts
  5932.  
  5933. .noworkout:
  5934.  move.w #0,(a3)+
  5935.  move.b #0,(a2)+
  5936.  add.w #64,a4
  5937.  dbra d7,.objpointrotlop
  5938.  rts
  5939.  
  5940.  
  5941. RotateObjectPts:
  5942.  
  5943.  move.w sinval,d5
  5944.  move.w cosval,d6
  5945.  
  5946.  move.l ObjectData,a4
  5947.  move.l ObjectPoints,a0
  5948.  move.w NumObjectPoints,d7
  5949.  move.l #ObjRotated,a1
  5950.  
  5951.  tst.b FULLSCR
  5952.  bne BIGOBJPTS
  5953.  
  5954.  
  5955. .objpointrotlop:
  5956.  
  5957.  cmp.b #3,16(a4)
  5958.  beq.s .itaux
  5959.  
  5960.  move.w (a0),d0
  5961.  sub.w xoff,d0
  5962.  move.w 4(a0),d1
  5963.  addq #8,a0
  5964.  
  5965.  tst.w 12(a4)
  5966.  blt .noworkout
  5967.  
  5968.  sub.w zoff,d1
  5969.  
  5970.  move.w d0,d2
  5971.  muls d6,d2
  5972.  move.w d1,d3
  5973.  muls d5,d3
  5974.  sub.l d3,d2
  5975.  
  5976.  
  5977.  add.l d2,d2
  5978.  swap d2
  5979.  move.w d2,(a1)+
  5980.  
  5981.  muls d5,d0
  5982.  muls d6,d1
  5983.  add.l d0,d1
  5984.  asl.l #1,d1
  5985.  swap d1
  5986. ; ext.l d1
  5987. ; divs #3,d1
  5988.  moveq #0,d3
  5989.  
  5990.  move.w d1,(a1)+
  5991.  ext.l d2
  5992.  asl.l #7,d2
  5993.  add.l xwobble,d2
  5994.  move.l d2,(a1)+
  5995.  
  5996.  dbra d7,.objpointrotlop
  5997.  
  5998.  rts
  5999.  
  6000. .itaux:
  6001.  add.w #64,a4
  6002.  bra .objpointrotlop
  6003.  
  6004. .noworkout:
  6005.   move.l #0,(a1)+
  6006.   move.l #0,(a1)+
  6007.   add.w #64,a4
  6008.   dbra d7,.objpointrotlop
  6009.   rts
  6010.   
  6011. BIGOBJPTS:
  6012.  
  6013. .objpointrotlop:
  6014.  
  6015.  cmp.b #3,16(a4)
  6016.  beq.s .itaux
  6017.  
  6018.  move.w (a0),d0
  6019.  sub.w xoff,d0
  6020.  move.w 4(a0),d1
  6021.  addq #8,a0
  6022.  
  6023.  tst.w 12(a4)
  6024.  blt .noworkout
  6025.  
  6026.  sub.w zoff,d1
  6027.  move.w d0,d2
  6028.  muls d6,d2
  6029.  move.w d1,d3
  6030.  muls d5,d3
  6031.  sub.l d3,d2
  6032.  
  6033.  
  6034.  add.l d2,d2
  6035.  swap d2
  6036.  move.w d2,(a1)+
  6037.  
  6038.  muls d5,d0
  6039.  muls d6,d1
  6040.  add.l d0,d1
  6041.  asl.l #2,d1
  6042.  swap d1
  6043.  ext.l d1
  6044.  divs #3,d1
  6045.  moveq #0,d3
  6046.  
  6047.  move.w d1,(a1)+
  6048.  ext.l d2
  6049.  asl.l #7,d2
  6050.  add.l xwobble,d2
  6051.  move.l d2,(a1)+
  6052.  sub.l xwobble,d2
  6053.  
  6054.  add.w #64,a4
  6055.  dbra d7,.objpointrotlop
  6056.  
  6057.  rts
  6058.  
  6059. .itaux:
  6060.  add.w #64,a4
  6061.  bra .objpointrotlop
  6062.  
  6063. .noworkout:
  6064.   move.l #0,(a1)+
  6065.   move.l #0,(a1)+
  6066.   add.w #64,a4
  6067.   dbra d7,.objpointrotlop
  6068.   rts
  6069.  
  6070. LightDraw:
  6071.  
  6072.  move.w (a0)+,d0
  6073.  move.w (a0)+,d1
  6074.  move.l #Rotated,a1
  6075.  move.w 6(a1,d0.w*8),d2
  6076.  ble.s oneendbehind
  6077.  move.w 6(a1,d1.w*8),d3
  6078.  bgt.s bothendsinfront
  6079.  
  6080. oneendbehind:
  6081.  rts
  6082. bothendsinfront:
  6083.  
  6084.  move.l #OnScreen,a2
  6085.  move.w (a2,d0.w*2),d0
  6086.  bge.s okleftend
  6087.  moveq #0,d0
  6088. okleftend:
  6089.  move.w (a2,d1.w*2),d1
  6090.  bgt.s somevis
  6091.  rts
  6092. somevis:
  6093.  cmp.w RIGHTX,d0
  6094.  blt.s somevis2
  6095.  rts
  6096. somevis2:
  6097.  cmp.w RIGHTX,d1
  6098.  blt.s okrightend
  6099.  move.w RIGHTX,d1
  6100.  subq #1,d1
  6101. okrightend:
  6102.  
  6103.  sub.w d0,d1
  6104.  blt.s wrongbloodywayround
  6105.  move.l #brightentab,a4
  6106.  move.l #objintocop,a1
  6107.  lea (a1,d0.w*2),a1
  6108.  
  6109.  move.l frompt,a3
  6110.  move.w #104*4,d6
  6111.  move.w #79,d2
  6112. lacross:
  6113.  move.w d2,d3
  6114.  move.l a3,a2
  6115.  adda.w (a1)+,a2
  6116. ldown:
  6117.  add.w d6,a2
  6118.  move.w (a2),d7
  6119.  move.w (a4,d7.w*2),(a2)
  6120.  dbra d3,ldown
  6121.  dbra d1,lacross
  6122.  
  6123. wrongbloodywayround:
  6124.  
  6125.  rts
  6126.  
  6127. FaceToPlace: dc.w 0
  6128.  
  6129. Cheese:
  6130.  dc.w 4,15
  6131.  
  6132. FacesList:
  6133.  dc.w 0,4*4
  6134.  dc.w 1,2*4
  6135.  dc.w 0,2*4
  6136.  dc.w 2,2*4
  6137.  dc.w 0,2*4
  6138.  dc.w 1,3*4
  6139.  dc.w 0,2*4
  6140.  dc.w 2,3*4
  6141.  dc.w 0,5*4
  6142.  dc.w 1,2*4
  6143.  dc.w 0,2*4
  6144.  dc.w 2,2*4
  6145.  dc.w 0,2*4
  6146.  dc.w 1,2*4
  6147.  dc.w 0,2*4
  6148.  dc.w 2,3*4
  6149.  dc.w 0,1*4
  6150.  dc.w 1,3*4
  6151.  dc.w 0,1*4
  6152.  dc.w 2,3*4
  6153.  dc.w 0,1*4
  6154.  
  6155. EndOfFacesList:
  6156.  
  6157. FacesPtr:
  6158.  dc.l FacesList
  6159. FacesCounter:
  6160.  dc.w 0
  6161. Expression:
  6162.  dc.w 0
  6163.  
  6164. PlaceFace:
  6165.  
  6166.  move.w FacesCounter,d0
  6167.  subq #1,d0
  6168.  bgt.s NoNewFace
  6169.  
  6170.  move.l FacesPtr,a0
  6171.  
  6172.  move.w 2(a0),d0
  6173.  move.w (a0),Expression
  6174.  addq #4,a0
  6175.  cmp.l #EndOfFacesList,a0
  6176.  blt.s NotFirstFace
  6177.  
  6178.  move.l #FacesList,a0
  6179.  
  6180. NotFirstFace
  6181.  move.l a0,FacesPtr
  6182.  
  6183. NoNewFace:
  6184.  
  6185.  move.w d0,FacesCounter
  6186.  
  6187.  Move.w FaceToPlace,d0
  6188.  muls #5,d0
  6189.  add.w Expression,d0
  6190.  move.l #FacePlace+10,a0
  6191.  move.l #Faces,a1
  6192.  muls #(4*32*5),d0
  6193.  adda.w d0,a1
  6194.  move.w #4,d0
  6195.  move.w #24,d1
  6196.  
  6197.  move.w #4,d3
  6198. bitplaneloop:
  6199.  move.w #31,d2
  6200. PlaceFaceToPlaceInFacePlaceLoop:
  6201.  move.l (a1),(a0)
  6202.  adda.w d0,a1
  6203.  adda.w d1,a0
  6204.  dbra d2,PlaceFaceToPlaceInFacePlaceLoop
  6205.  dbra d3,bitplaneloop
  6206.  
  6207.  rts
  6208.  
  6209. Energy:
  6210.  dc.w 191
  6211. OldEnergy:
  6212.  dc.w 191
  6213. Ammo: dc.w 63
  6214. OldAmmo: dc.w 63
  6215.  
  6216. FullEnergy:
  6217.  move.w #127,Energy
  6218.  move.w #127,OldEnergy
  6219.  move.l #health,a0
  6220.  move.l #borders,a1
  6221.  add.l #25*8*2+6,a1
  6222.  lea 2592(a1),a2
  6223.  move.w #127,d0
  6224. PutInFull:
  6225.  move.b (a0)+,(a1)
  6226.  move.b (a0)+,8(a1)
  6227.  add.w #16,a1
  6228.  move.b (a0)+,(a2)
  6229.  move.b (a0)+,8(a2)
  6230.  add.w #16,a2
  6231.  dbra d0,PutInFull
  6232.  
  6233.  rts
  6234.  
  6235. ;EnergyBar:
  6236.  
  6237.  move.w Energy,d0
  6238.  bgt.s .noeneg
  6239.  move.w #0,d0
  6240. .noeneg:
  6241.  move.w d0,Energy
  6242.  
  6243.  cmp.w OldEnergy,d0
  6244.  bne.s gottochange
  6245.  
  6246. NoChange
  6247.  rts
  6248.  
  6249. gottochange:
  6250.   
  6251.  blt LessEnergy
  6252.  cmp.w #127,Energy
  6253.  blt.s NotMax
  6254.  move.w #127,Energy
  6255. NotMax:
  6256.  
  6257.  move.w Energy,d0
  6258.  move.w OldEnergy,d2
  6259.  sub.w d0,d2
  6260.  beq.s NoChange    
  6261.  neg.w d2
  6262.  
  6263.  move.w #127,d3
  6264.  sub.w d0,d3
  6265.  
  6266.  move.l #health,a0
  6267.  lea (a0,d3.w*4),a0
  6268.  move.l #borders+25*16+6,a1
  6269.  lsl.w #4,d3
  6270.  add.w d3,a1
  6271.  lea 2592(a1),a2
  6272.  
  6273. EnergyRise:
  6274.  move.b (a0)+,(a1)
  6275.  move.b (a0)+,8(a1)
  6276.  add.w #16,a1
  6277.  move.b (a0)+,(a2)
  6278.  move.b (a0)+,8(a2)
  6279.  add.w #16,a2
  6280.  subq #1,d2
  6281.  bgt.s EnergyRise
  6282.  
  6283.  move.w Energy,OldEnergy
  6284.  
  6285.  rts 
  6286.  
  6287. LessEnergy: 
  6288.  move.w OldEnergy,d2
  6289.  sub.w d0,d2
  6290.  
  6291.  move.w #127,d3
  6292.  sub.w OldEnergy,d3
  6293.  
  6294.  move.l #borders+25*16+6,a1
  6295.  asl.w #4,d3
  6296.  add.w d3,a1
  6297.  lea 2592(a1),a2
  6298.  
  6299. EnergyDrain:
  6300.  move.b #0,(a1)
  6301.  move.b #0,8(a1)
  6302.  move.b #0,(a2)
  6303.  move.b #0,8(a2)
  6304.  add.w #16,a1
  6305.  add.w #16,a2
  6306.  subq #1,d2
  6307.  bgt.s EnergyDrain
  6308.  
  6309.  move.w Energy,OldEnergy
  6310.  
  6311.  rts 
  6312.  
  6313. firstdigit: dc.b 0
  6314. secdigit: dc.b 0
  6315. thirddigit: dc.b 0
  6316.  
  6317.  even
  6318.  
  6319. AmmoBar:
  6320.  
  6321. * Do guns first.
  6322.  
  6323.  move.l #borderchars,a4
  6324.  move.l #PLAYERONEGUNS,a5
  6325.  move.w #9,d2
  6326.  moveq #0,d0
  6327. putingunnums:
  6328.  move.w #4,d1
  6329.  move.l a4,a0
  6330.  cmp.b p1_gunselected,d0
  6331.  bne.s .notsel
  6332.  add.l #5*10*8*2,a0
  6333.  addq #2,a5
  6334.  bra.s .donesel
  6335. .notsel:
  6336.  tst.w (a5)+
  6337.  beq.s .donesel
  6338.  add.l #5*10*8,a0
  6339. .donesel:
  6340.  move.l SCRNDRAWPT,a1
  6341.  add.w d0,a1
  6342.  add.l #3+(248*40),a1
  6343.  bsr DRAWDIGIT
  6344.  addq #1,d0
  6345.  dbra d2,putingunnums
  6346.  
  6347.  move.w Ammo,d0
  6348.  ext.l d0
  6349.  divs #10,d0
  6350.  swap d0
  6351.  move.b d0,thirddigit
  6352.  swap d0
  6353.  ext.l d0
  6354.  divs #10,d0
  6355.  move.b d0,firstdigit
  6356.  swap d0
  6357.  move.b d0,secdigit
  6358.  
  6359.  move.l #borderchars+15*8*10,a0
  6360.  cmp.w #10,Ammo
  6361.  blt.s .notsmallamo
  6362.  add.l #7*8*10,a0
  6363. .notsmallamo:
  6364.  
  6365.  move.l SCRNDRAWPT,a1
  6366.  add.l #20+246*40,a1
  6367.  move.b firstdigit,d0
  6368.  move.w #6,d1
  6369.  bsr DRAWDIGIT
  6370.  
  6371.  move.l SCRNDRAWPT,a1
  6372.  add.l #21+246*40,a1
  6373.  move.b secdigit,d0
  6374.  move.w #6,d1
  6375.  bsr DRAWDIGIT
  6376.  
  6377.  move.l SCRNDRAWPT,a1
  6378.  add.l #22+246*40,a1
  6379.  move.b thirddigit,d0
  6380.  move.w #6,d1
  6381.  bsr DRAWDIGIT
  6382.  
  6383.  rts
  6384.  
  6385. EnergyBar
  6386.  move.w Energy,d0
  6387.  ext.l d0
  6388.  divs #10,d0
  6389.  swap d0
  6390.  move.b d0,thirddigit
  6391.  swap d0
  6392.  ext.l d0
  6393.  divs #10,d0
  6394.  move.b d0,firstdigit
  6395.  swap d0
  6396.  move.b d0,secdigit
  6397.  
  6398.  move.l #borderchars+15*8*10,a0
  6399.  cmp.w #10,Energy
  6400.  blt.s .notsmallamo
  6401.  add.l #7*8*10,a0
  6402. .notsmallamo:
  6403.  
  6404.  move.l SCRNDRAWPT,a1
  6405.  add.l #34+246*40,a1
  6406.  move.b firstdigit,d0
  6407.  move.w #6,d1
  6408.  bsr DRAWDIGIT
  6409.  
  6410.  move.l SCRNDRAWPT,a1
  6411.  add.l #35+246*40,a1
  6412.  move.b secdigit,d0
  6413.  move.w #6,d1
  6414.  bsr DRAWDIGIT
  6415.  
  6416.  move.l SCRNDRAWPT,a1
  6417.  add.l #36+246*40,a1
  6418.  move.b thirddigit,d0
  6419.  move.w #6,d1
  6420.  bsr DRAWDIGIT
  6421.  
  6422.  rts
  6423.  
  6424.  
  6425. DRAWDIGIT:
  6426.  ext.w d0
  6427.  lea (a0,d0.w),a2
  6428. charlines:
  6429.  lea 30720(a1),a3 
  6430.  move.b (a2),(a1)
  6431.  move.b 10(a2),10240(a1)
  6432.  move.b 20(a2),20480(a1)
  6433.  move.b 30(a2),(a3)
  6434.  move.b 40(a2),10240(a3)
  6435.  move.b 50(a2),20480(a3)
  6436.  lea 30720(a3),a3
  6437.  move.b 60(a2),(a3)
  6438.  move.b 70(a2),10240(a3)
  6439.  
  6440.  add.w #10*8,a2
  6441.  add.w #40,a1
  6442.  dbra d1,charlines
  6443.  
  6444.  rts
  6445.  
  6446. borderchars: incbin "ab3:includes/bordercharsRAW"
  6447.  
  6448. ; cmp.w OldAmmo,d0
  6449. ; bne.s .gottochange
  6450. .NoChange
  6451.  rts
  6452.  
  6453. .gottochange:
  6454.   
  6455.  blt LessAmmo
  6456.  cmp.w #63,Ammo
  6457.  blt.s .NotMax
  6458.  move.w #63,Ammo
  6459. .NotMax:
  6460.  
  6461.  move.w Ammo,d0
  6462.  move.w OldAmmo,d2
  6463.  sub.w d0,d2
  6464.  beq.s .NoChange
  6465.  neg.w d2
  6466.  
  6467.  move.w #63,d3
  6468.  sub.w d0,d3
  6469.  
  6470.  move.l #Ammunition,a0
  6471.  lea (a0,d3.w*8),a0
  6472.  move.l #borders+5184+25*16+1,a1
  6473.  lsl.w #5,d3
  6474.  add.w d3,a1
  6475.  lea 2592(a1),a2
  6476.  
  6477. AmmoRise:
  6478.  move.b (a0)+,(a1)
  6479.  move.b (a0)+,8(a1)
  6480.  add.w #16,a1
  6481.  move.b (a0)+,(a2)
  6482.  move.b (a0)+,8(a2)
  6483.  add.w #16,a2
  6484.  move.b (a0)+,(a1)
  6485.  move.b (a0)+,8(a1)
  6486.  add.w #16,a1
  6487.  move.b (a0)+,(a2)
  6488.  move.b (a0)+,8(a2)
  6489.  add.w #16,a2
  6490.  subq #1,d2
  6491.  bgt.s AmmoRise
  6492.  
  6493.  move.w Ammo,OldAmmo
  6494.  
  6495.  rts 
  6496.  
  6497.  
  6498. LessAmmo: 
  6499.  move.w OldAmmo,d2
  6500.  sub.w d0,d2
  6501.  
  6502.  move.w #63,d3
  6503.  sub.w OldAmmo,d3
  6504.  
  6505.  move.l #borders++5184+25*16+1,a1
  6506.  asl.w #5,d3
  6507.  add.w d3,a1
  6508.  lea 2592(a1),a2
  6509.  
  6510. AmmoDrain:
  6511.  move.b #0,(a1)
  6512.  move.b #0,8(a1)
  6513.  move.b #0,(a2)
  6514.  move.b #0,8(a2)
  6515.  add.w #16,a1
  6516.  add.w #16,a2
  6517.  move.b #0,(a1)
  6518.  move.b #0,8(a1)
  6519.  move.b #0,(a2)
  6520.  move.b #0,8(a2)
  6521.  add.w #16,a1
  6522.  add.w #16,a2
  6523.  subq #1,d2
  6524.  bgt.s AmmoDrain
  6525.  
  6526.  move.w Ammo,OldAmmo
  6527.  
  6528.  rts 
  6529.  
  6530. nulop:
  6531.  move.w #$0010,$dff000+intreq
  6532.  rte
  6533.  
  6534. doanything: dc.w 0
  6535.  
  6536. end:
  6537. ;     _break #0
  6538.  
  6539.  clr.b dosounds
  6540.  clr.b doanything
  6541.  
  6542.  move.w PLAYERONEHEALTH,Energy
  6543.  cmp.b #'s',mors
  6544.  bne.s .notsl
  6545.  move.w PLR2_energy,Energy
  6546. .notsl:
  6547.  
  6548.  bsr EnergyBar
  6549.  
  6550.  move.l drawpt,d0
  6551.  move.l olddrawpt,drawpt
  6552.  move.l d0,olddrawpt
  6553.  move.l d0,$dff084
  6554.  
  6555.  
  6556.  cmp.b #'b',Prefsfile+3
  6557.  bne.s .noback
  6558.  jsr mt_end
  6559. .noback
  6560.  tst.w Energy
  6561.  bgt.s wevewon
  6562.  
  6563.  move.l #gameover,mt_data
  6564.  st UseAllChannels
  6565.  clr.b reachedend
  6566.  jsr mt_init
  6567. playgameover:
  6568.  move.l #$dff000,a6
  6569. waitfortop2:
  6570.  
  6571.     
  6572.  btst.b #0,intreqrl(a6)
  6573.  beq waitfortop2
  6574.  move.w #$1,intreq(a6)
  6575.  
  6576.     
  6577.  jsr mt_music
  6578.  
  6579.  
  6580.     
  6581.  tst.b reachedend
  6582.  beq.s playgameover
  6583.  
  6584.  bra wevelost
  6585.  
  6586.  
  6587. wevewon:
  6588.  
  6589.  cmp.b #'n',mors
  6590.  bne.s .nonextlev
  6591.  add.w #1,MAXLEVEL
  6592.  st FINISHEDLEVEL
  6593. .nonextlev:
  6594.  
  6595.  move.l #welldone,mt_data
  6596.  st UseAllChannels
  6597.  clr.b reachedend
  6598.  jsr mt_init
  6599. playwelldone:
  6600.  move.l #$dff000,a6
  6601. waitfortop3:
  6602.  btst.b #0,intreqrl(a6)
  6603.  beq waitfortop3
  6604.  move.w #$1,intreq(a6)
  6605.  
  6606.  jsr mt_music
  6607.  
  6608.  tst.b reachedend
  6609.  beq.s playwelldone
  6610.  
  6611. wevelost:
  6612.  
  6613.  PROTICHECK a0
  6614.  
  6615.  jmp closeeverything 
  6616.  
  6617. endnomusic
  6618.  clr.b doanything
  6619.  cmp.b #'b',Prefsfile+3
  6620.  bne.s .noback
  6621.  jsr mt_end
  6622. .noback
  6623. *******************************
  6624. ; cmp.b #'n',mors
  6625. ; bne.s .nonextlev
  6626. ; cmp.w #15,MAXLEVEL
  6627. ; bge.s .nonextlev
  6628. ; add.w #1,MAXLEVEL
  6629. ; st FINISHEDLEVEL
  6630. ;.nonextlev:
  6631. ******************************
  6632.  
  6633.  jmp closeeverything
  6634.  
  6635. do32:
  6636.  move.w #31,d7
  6637.  move.w #$180,d1
  6638. across:
  6639.  move.w d1,(a1)+
  6640.  move.w d1,(a3)+
  6641.  move.w #0,(a1)+ 
  6642.  move.w #0,(a3)+
  6643.  add.w #2,d1
  6644.  dbra d7,across
  6645.  rts
  6646.  
  6647. string:
  6648.     dc.b    'credits',0
  6649.  
  6650. ENDGAMESCROLL:
  6651.  
  6652.     move.l    4.w,a6
  6653.     move.l    #string,d1
  6654.     moveq    #0,d2
  6655.     moveq    #0,d3
  6656.     jsr    _LVOExecute(a6)
  6657.  
  6658. ; include "endscroll.s"
  6659.  
  6660. ***********************************
  6661.  include "ab3:source_4000/CD32JOY"
  6662.  
  6663.  
  6664.  
  6665. *************************************
  6666. * Set left and right clip values
  6667. *************************************
  6668.  
  6669.  
  6670.  
  6671. NEWsetlclip:
  6672.  move.l #OnScreen,a1
  6673.  move.l #Rotated,a2
  6674.  move.l CONNECT_TABLE,a3
  6675.  
  6676.  move.w (a0),d0
  6677.  bge.s .notignoreleft
  6678.  
  6679. ; move.l #0,(a6)
  6680.  
  6681.  bra .leftnotoktoclip
  6682. .notignoreleft:
  6683.  
  6684.  move.w 6(a2,d0*8),d3    ; left z val
  6685.  bgt.s .leftclipinfront
  6686.  addq #2,a0
  6687.  rts
  6688.  
  6689.  tst.w 6(a2,d0*8)
  6690.  bgt.s .leftnotoktoclip
  6691. .ignoreboth:
  6692. ; move.l #0,(a6)
  6693. ; move.l #96*65536,4(a6)
  6694.  move.w #0,leftclip
  6695.  move.w RIGHTX,rightclip
  6696.  addq #8,a6
  6697.  addq #2,a0
  6698.  rts
  6699.  
  6700. .leftclipinfront:
  6701.  move.w (a1,d0*2),d1    ; left x on screen
  6702.  move.w (a0),d2
  6703.  move.w 2(a3,d2.w*4),d2
  6704.  move.w (a1,d2.w*2),d2
  6705.  cmp.w d1,d2
  6706.  bgt.s .leftnotoktoclip
  6707.  
  6708. ; move.w d1,(a6)
  6709. ; move.w d3,2(a6)
  6710.  cmp.w leftclip,d1
  6711.  ble.s .leftnotoktoclip
  6712.  move.w d1,leftclip
  6713. .leftnotoktoclip:
  6714.  
  6715.  addq #2,a0
  6716.  
  6717.  rts
  6718.  
  6719. NEWsetrclip
  6720.  move.l #OnScreen,a1
  6721.  move.l #Rotated,a2
  6722.  move.l CONNECT_TABLE,a3
  6723.  move.w (a0),d0
  6724.  bge.s .notignoreright
  6725. ; move.w #96,4(a6)
  6726. ; move.w #0,6(a6)
  6727.  move.w #0,d4
  6728.  bra .rightnotoktoclip
  6729. .notignoreright:
  6730.  move.w 6(a2,d0*8),d4    ; right z val
  6731.  bgt.s .rightclipinfront
  6732. ; move.w #96,4(a6)
  6733. ; move.w #0,6(a6)
  6734.  bra.s .rightnotoktoclip
  6735.  
  6736. .rightclipinfront:
  6737.  move.w (a1,d0*2),d1    ; right x on screen
  6738.  move.w (a0),d2
  6739.  move.w (a3,d2.w*4),d2
  6740.  move.w (a1,d2.w*2),d2
  6741.  cmp.w d1,d2
  6742.  blt.s .rightnotoktoclip
  6743. ; move.w d1,4(a6)
  6744. ; move.w d4,6(a6)
  6745.  
  6746.  cmp.w rightclip,d1
  6747.  bge.s .rightnotoktoclip
  6748.  addq #1,d1
  6749.  move.w d1,rightclip
  6750. .rightnotoktoclip:
  6751.  addq #8,a6
  6752.  addq #2,a0
  6753.  rts
  6754.  
  6755. FIRSTsetlrclip:
  6756.  move.l #OnScreen,a1
  6757.  move.l #Rotated,a2
  6758.  
  6759.  move.w (a0)+,d0
  6760.  bge.s .notignoreleft
  6761.  bra .leftnotoktoclip
  6762. .notignoreleft:
  6763.  
  6764.  move.w 6(a2,d0*8),d3    ; left z val
  6765.  bgt.s .leftclipinfront
  6766.  
  6767.  move.w (a0),d0
  6768.  blt.s .ignoreboth
  6769.  tst.w 6(a2,d0*8)
  6770.  bgt.s .leftnotoktoclip
  6771. .ignoreboth
  6772.  move.w RIGHTX,rightclip
  6773.  move.w #0,leftclip
  6774.  addq #2,a0
  6775.  rts
  6776.  
  6777. .leftclipinfront:
  6778.  move.w (a1,d0*2),d1    ; left x on screen
  6779.  cmp.w leftclip,d1
  6780.  ble.s .leftnotoktoclip
  6781.  move.w d1,leftclip
  6782. .leftnotoktoclip:
  6783.  
  6784.  move.w (a0)+,d0
  6785.  bge.s .notignoreright
  6786.  move.w #0,d4
  6787.  bra .rightnotoktoclip
  6788. .notignoreright:
  6789.  move.w 6(a2,d0*8),d4    ; right z val
  6790.  ble.s .rightnotoktoclip
  6791.  
  6792. .rightclipinfront:
  6793.  move.w (a1,d0*2),d1    ; right x on screen
  6794.  addq #1,d1
  6795.  cmp.w rightclip,d1
  6796.  bge.s .rightnotoktoclip
  6797.  move.w d1,rightclip
  6798. .rightnotoktoclip:
  6799.  
  6800. ; move.w leftclip,d0
  6801. ; move.w rightclip,d1
  6802. ; cmp.w d0,d1
  6803. ; bge.s .noswap
  6804. ; move.w #192,rightclip
  6805. ; move.w #0,leftclip
  6806. ;.noswap:
  6807.  
  6808.  rts
  6809.  
  6810.  
  6811. leftclip2: dc.w 0
  6812. rightclip2: dc.w 0
  6813. ZoneBright: dc.w 0
  6814.  
  6815. npolys: dc.w 0
  6816.  
  6817. PLR1_fire: dc.b 0
  6818. PLR2_fire: dc.b 0
  6819.  
  6820. *****************************************************
  6821.  
  6822.  
  6823. pastdata:
  6824. ***********************************
  6825. * This routine animates brightnesses.
  6826.  
  6827.  
  6828. liftpt: dc.l liftanimtab
  6829.  
  6830. brightpt:
  6831.  dc.l brightanimtab
  6832.  
  6833.  
  6834. liftanim:
  6835.  rts
  6836.  
  6837. ******************************
  6838.  include "ab3:source_4000/ObjectMove"
  6839.  include "ab3:source_4000/newAnims"
  6840.  include "ab3:source_4000/airoutine.s"
  6841. ******************************
  6842. startpass:
  6843. ; include "ab3:source_4000/password_reloc.s"
  6844. endpass:
  6845.  
  6846. rotanimpt: dc.w 0
  6847. xradd: dc.w 5
  6848. yradd: dc.w 8
  6849. xrpos: dc.w 320
  6850. yrpos: dc.w 320
  6851.  
  6852. rotanim:
  6853.  rts
  6854.  
  6855. option:
  6856.  dc.l 0,0
  6857.  
  6858. ********** WALL STUFF *******************************
  6859.  
  6860.  include "AB3:source_4000/hireswall.s"
  6861.  include "AB3:source_4000/hiresgourwall.s"
  6862.  
  6863. *****************************************************
  6864.  
  6865. ******************************************
  6866. * floor polygon
  6867.  
  6868. numsidestd: dc.w 0
  6869. bottomline: dc.w 0
  6870.  
  6871. checkforwater:
  6872.  tst.b usewater
  6873.  beq.s .notwater
  6874.  
  6875.  move.l Roompt,a1
  6876.  move.w (a1),d7
  6877.  cmp.w currzone,d7
  6878.  bne.s .notwater
  6879.  
  6880.  move.b #$f,fillscrnwater
  6881.  
  6882. .notwater:
  6883.  move.w (a0)+,d6    ; sides-1
  6884.  add.w d6,d6
  6885.  add.w d6,a0
  6886.  add.w #4+6,a0
  6887.  rts
  6888.  
  6889.  rts
  6890.  
  6891. NewCornerBuff:
  6892.  ds.l 100
  6893. CLRNOFLOOR: dc.w 0
  6894.  
  6895. itsafloordraw:
  6896.  
  6897. * If D0 =1 then its a floor otherwise (=2) it's
  6898. * a roof.
  6899.  
  6900.  move.w #0,above
  6901.  move.w (a0)+,d6    ; ypos of poly
  6902.  
  6903.  tst.b usewater
  6904.  beq.s .oknon
  6905.  tst.b DOANYWATER
  6906.  beq dontdrawreturn
  6907. .oknon
  6908.  
  6909.  move.w d6,d7
  6910.  ext.l d7
  6911.  asl.l #6,d7
  6912.  cmp.l TOPOFROOM,d7
  6913.  blt checkforwater
  6914.  cmp.l BOTOFROOM,d7
  6915.  bgt.s dontdrawreturn
  6916.  
  6917.  move.w leftclip,d7
  6918.  cmp.w rightclip,d7
  6919.  bge.s dontdrawreturn
  6920.  
  6921.  sub.w flooryoff,d6
  6922.  bgt.s below
  6923.  blt.s aboveplayer
  6924.  
  6925.  tst.b usewater
  6926.  beq.s .notwater
  6927.  
  6928.  move.l Roompt,a1
  6929.  move.w (a1),d7
  6930.  cmp.w currzone,d7
  6931.  
  6932.  bne.s .notwater
  6933.  
  6934.  st fillscrnwater
  6935.  
  6936. .notwater:
  6937.  
  6938.  
  6939. dontdrawreturn:
  6940.  move.w (a0)+,d6    ; sides-1
  6941.  add.w d6,d6
  6942.  add.w d6,a0
  6943.  add.w #4+6,a0
  6944.  rts
  6945. aboveplayer:
  6946.  
  6947.  tst.b usewater
  6948.  beq.s .notwater
  6949.  
  6950.  move.l Roompt,a1
  6951.  move.w (a1),d7
  6952.  cmp.w currzone,d7
  6953.  bne.s .notwater
  6954.  
  6955.  move.b #$f,fillscrnwater
  6956.  
  6957. .notwater:
  6958.  
  6959.  btst #1,d0
  6960.  beq.s dontdrawreturn
  6961.  move.w MIDDLEY,d7
  6962.  sub.w topclip,d7 
  6963.  ble.s dontdrawreturn
  6964.  move.w #1,d0
  6965.  move.w d0,above
  6966.  neg.w d6
  6967.  bra.s notbelow
  6968. below:
  6969.  move.w botclip,d7
  6970.  sub.w MIDDLEY,d7
  6971.  ble.s dontdrawreturn
  6972. notbelow:
  6973.  btst #0,d0
  6974.  beq.s dontdrawreturn
  6975.  move.w d6,distaddr
  6976.  muls #64,d6
  6977.  move.l d6,ypos
  6978.  ext.l d7
  6979.  divs.l d7,d6        ; zpos of bottom
  6980.             ; visible line
  6981.  
  6982.  beq dontdrawreturn
  6983.  
  6984.  cmp.l #32767,d6
  6985.  bgt dontdrawreturn
  6986.             
  6987.  move.w d6,minz
  6988.  move.w d7,bottomline
  6989.  
  6990. ; Go round each point finding out
  6991. ; if it should be visible or not.
  6992.  
  6993.  move.l a0,-(a7)
  6994.  
  6995.  move.w (a0)+,d7    ; number of sides
  6996.  move.l #Rotated,a1
  6997.  move.l #OnScreen,a2
  6998.  move.l #NewCornerBuff,a3
  6999.  moveq #0,d4
  7000.  moveq #0,d5
  7001.  moveq #0,d6
  7002.  clr.b anyclipping
  7003.  
  7004. cornerprocessloop:
  7005.  
  7006.  move.w (a0)+,d0
  7007.  and.w #$fff,d0
  7008.  move.w 6(a1,d0.w*8),d1
  7009.  ble  .canttell
  7010.  
  7011.  move.w (a2,d0.w*2),d3
  7012.  cmp.w leftclip,d3
  7013.  bgt.s .nol
  7014.  st d4
  7015.  st anyclipping
  7016.  bra.s .nos
  7017. .nol:
  7018.  cmp.w rightclip,d3
  7019.  blt.s .nor
  7020.  st d6
  7021.  st anyclipping
  7022.  bra.s .nos
  7023. .nor:
  7024.  st d5
  7025. .nos:
  7026.  bra .cantell
  7027.  
  7028. .canttell:
  7029.  st d5
  7030.  st anyclipping
  7031.  
  7032. .cantell:
  7033.  
  7034.  
  7035.  dbra d7,cornerprocessloop
  7036.  
  7037.  
  7038.  move.l (a7)+,a0
  7039.  tst.b d5
  7040.  bne.s somefloortodraw
  7041.  eor.b d4,d6
  7042.  bne dontdrawreturn
  7043.  
  7044. somefloortodraw:
  7045.  
  7046.  tst.b gourfloor
  7047.  bne goursides
  7048.  
  7049.  move.w #300,top
  7050.  move.w #-1,bottom
  7051.  move.w #0,drawit
  7052.  move.l #Rotated,a1
  7053.  move.l #OnScreen,a2
  7054.  move.w (a0)+,d7    ; no of sides
  7055. sideloop:
  7056.  move.w minz,d6
  7057.  move.w (a0)+,d1
  7058.  move.w (a0),d3
  7059.  and.w #$fff,d1
  7060.  and.w #$fff,d3
  7061.  
  7062.  move.w 6(a1,d1*8),d4    ;first z
  7063.  cmp.w d6,d4
  7064.  bgt firstinfront
  7065.  move.w 6(a1,d3*8),d5    ; sec z
  7066.  cmp.w d6,d5
  7067.  ble bothbehind
  7068. ** line must be on left and partially behind.
  7069.  sub.w d5,d4
  7070.  move.l (a1,d1*8),d0
  7071.  sub.l (a1,d3*8),d0
  7072.  asr.l #7,d0
  7073.  sub.w d5,d6
  7074.  muls d6,d0    ; new x coord
  7075.  divs d4,d0
  7076.  ext.l d0
  7077.  asl.l #7,d0
  7078.  
  7079.  add.l (a1,d3*8),d0
  7080.  move.w minz,d4
  7081.  move.w (a2,d3*2),d2
  7082.  divs d4,d0
  7083.  add.w MIDDLEX,d0
  7084.  move.l ypos,d3
  7085.  divs d5,d3
  7086.  move.w bottomline,d1 
  7087.  bra lineclipped
  7088.  
  7089. firstinfront:
  7090.  move.w 6(a1,d3*8),d5    ; sec z
  7091.  cmp.w d6,d5
  7092.  bgt bothinfront
  7093. ** line must be on right and partially behind.
  7094.  sub.w d4,d5    ; dz
  7095.  move.l (a1,d3*8),d2
  7096.  sub.l (a1,d1*8),d2    ; dx
  7097.  sub.w d4,d6
  7098.  asr.l #7,d2
  7099.  muls d6,d2    ; new x coord
  7100.  divs d5,d2
  7101.  ext.l d2
  7102.  asl.l #7,d2
  7103.  add.l (a1,d1*8),d2
  7104.  move.w minz,d5
  7105.  move.w (a2,d1*2),d0
  7106.  divs d5,d2
  7107.  add.w MIDDLEX,d2
  7108.  move.l ypos,d1
  7109.  divs d4,d1
  7110.  move.w bottomline,d3 
  7111.  bra lineclipped
  7112.  
  7113. bothinfront:
  7114.  
  7115. * Also, usefully enough, both are on-screen
  7116. * so no bottom clipping is needed.
  7117.  
  7118.  move.w (a2,d1*2),d0    ; first x
  7119.  move.w (a2,d3*2),d2    ; second x
  7120.  move.l ypos,d1
  7121.  move.l d1,d3
  7122.  divs d4,d1        ; first y
  7123.  divs d5,d3        ; second y
  7124. lineclipped:
  7125.  move.l #rightsidetab,a3
  7126.  cmp.w d1,d3
  7127.  beq lineflat
  7128.  st drawit
  7129.  bgt lineonright
  7130.  move.l #leftsidetab,a3
  7131.  exg d1,d3
  7132.  exg d0,d2
  7133.  
  7134.  lea (a3,d1*2),a3
  7135.  
  7136.  cmp.w top(pc),d1
  7137.  bge.s .nonewtop
  7138.  move.w d1,top
  7139. .nonewtop:
  7140.  cmp.w bottom(pc),d3
  7141.  ble.s .nonewbot
  7142.  move.w d3,bottom
  7143. .nonewbot:
  7144.  
  7145.  sub.w d1,d3    ; dy
  7146.  sub.w d0,d2    ; dx
  7147.  
  7148.  blt .linegoingleft
  7149.  
  7150.  ext.l d2
  7151.  divs d3,d2
  7152.  move.w d2,d6
  7153.  swap d2
  7154.  
  7155. ; moveq #0,d6
  7156. ; sub.w d3,d2
  7157. ; blt.s .noco
  7158. ;.makeco
  7159. ; addq #1,d6
  7160. ; sub.w d3,d2
  7161. ; bge.s .makeco
  7162. ;.noco
  7163. ; add.w d3,d2
  7164.  
  7165.  move.w d3,d4
  7166.  move.w d3,d5
  7167.  subq #1,d5
  7168.  move.w d6,d1
  7169.  addq #1,d1
  7170.  
  7171. .pixlopright:
  7172.  move.w d0,(a3)+
  7173.  sub.w d2,d4
  7174.  bge.s .nobigstep
  7175.  add.w d1,d0
  7176.  add.w d3,d4
  7177.  dbra d5,.pixlopright
  7178.  bra lineflat
  7179. .nobigstep
  7180.  add.w d6,d0
  7181.  dbra d5,.pixlopright
  7182.  bra lineflat
  7183.  
  7184. .linegoingleft:
  7185.  
  7186.  neg.w d2
  7187.  
  7188.  ext.l d2
  7189.  divs d3,d2
  7190.  move.w d2,d6
  7191.  swap d2
  7192.  
  7193.  
  7194. ; moveq #0,d6
  7195. ; sub.w d3,d2
  7196. ; blt.s .nocol
  7197. ;.makecol
  7198. ; addq #1,d6
  7199. ; sub.w d3,d2
  7200. ; bge.s .makecol
  7201. ;.nocol
  7202. ; add.w d3,d2
  7203.  
  7204.  
  7205.  
  7206.  move.w d3,d4
  7207.  move.w d3,d5
  7208.  subq #1,d5
  7209.  
  7210.  move.w d6,d1
  7211.  addq #1,d1
  7212.  
  7213. .pixlopleft:
  7214.  sub.w d2,d4
  7215.  bge.s .nobigstepl
  7216.  sub.w d1,d0
  7217.  add.w d3,d4
  7218.  move.w d0,(a3)+
  7219.  dbra d5,.pixlopleft
  7220.  bra lineflat
  7221.  
  7222. .nobigstepl
  7223.  sub.w d6,d0
  7224.  move.w d0,(a3)+
  7225.  dbra d5,.pixlopleft
  7226.  bra lineflat
  7227.  
  7228. lineonright:
  7229.  
  7230.  lea (a3,d1*2),a3
  7231.  
  7232.  cmp.w top(pc),d1
  7233.  bge.s .nonewtop
  7234.  move.w d1,top
  7235. .nonewtop:
  7236.  cmp.w bottom(pc),d3
  7237.  ble.s .nonewbot
  7238.  move.w d3,bottom
  7239. .nonewbot:
  7240.  
  7241.  sub.w d1,d3    ; dy
  7242.  sub.w d0,d2    ; dx
  7243.  blt .linegoingleft
  7244. ; addq #1,d0
  7245.  ext.l d2
  7246.  divs d3,d2
  7247.  move.w d2,d6
  7248.  swap d2
  7249.  
  7250. ; moveq #0,d6
  7251. ; sub.w d3,d2
  7252. ; blt.s .noco
  7253. ;.makeco
  7254. ; addq #1,d6
  7255. ; sub.w d3,d2
  7256. ; bge.s .makeco
  7257. ;.noco
  7258. ; add.w d3,d2
  7259.  
  7260.  move.w d3,d4
  7261.  move.w d3,d5
  7262.  subq #1,d5
  7263.  move.w d6,d1
  7264.  addq #1,d1
  7265.  
  7266. .pixlopright:
  7267.  sub.w d2,d4
  7268.  bge.s .nobigstep
  7269.  add.w d1,d0
  7270.  add.w d3,d4
  7271.  move.w d0,(a3)+
  7272.  dbra d5,.pixlopright
  7273.  bra lineflat
  7274.  
  7275. .nobigstep
  7276.  add.w d6,d0
  7277.  move.w d0,(a3)+
  7278.  dbra d5,.pixlopright
  7279.  bra lineflat
  7280.  
  7281. .linegoingleft:
  7282. ; addq #1,d0
  7283.  neg.w d2
  7284.  
  7285.  ext.l d2
  7286.  divs d3,d2
  7287.  move.w d2,d6
  7288.  swap d2
  7289.  
  7290.  
  7291. ; moveq #0,d6
  7292. ; sub.w d3,d2
  7293. ; blt.s .nocol
  7294. ;.makecol
  7295. ; addq #1,d6
  7296. ; sub.w d3,d2
  7297. ; bge.s .makecol
  7298. ;.nocol
  7299. ; add.w d3,d2
  7300.  
  7301.  move.w d3,d4
  7302.  move.w d3,d5
  7303.  subq #1,d5
  7304.  move.w d6,d1
  7305.  addq #1,d1
  7306.  
  7307. .pixlopleft:
  7308.  move.w d0,(a3)+
  7309.  sub.w d2,d4
  7310.  bge.s .nobigstepl
  7311.  sub.w d1,d0
  7312.  add.w d3,d4
  7313.  dbra d5,.pixlopleft
  7314.  bra lineflat
  7315.  
  7316. .nobigstepl
  7317.  sub.w d6,d0
  7318.  dbra d5,.pixlopleft
  7319.  
  7320. lineflat:
  7321.  
  7322. bothbehind:
  7323.  dbra d7,sideloop
  7324.  bra pastsides
  7325.  
  7326. fbr: dc.w 0
  7327. sbr: dc.w 0
  7328. FloorPtBrights: dc.l 0
  7329.  
  7330. goursides:
  7331.  
  7332.  move.w #300,top
  7333.  move.w #-1,bottom
  7334.  move.w #0,drawit
  7335.  move.l #Rotated,a1
  7336.  move.l #OnScreen,a2
  7337.  move.w (a0)+,d7    ; no of sides
  7338. sideloopGOUR:
  7339.  move.w minz,d6
  7340.  move.w (a0)+,d1
  7341.  move.w (a0),d3
  7342.  
  7343.  move.w d1,d4
  7344.  move.w d3,d5
  7345.  and.w #$0fff,d1
  7346.  and.w #$0fff,d3
  7347.  
  7348.  rol.w #4,d4
  7349.  rol.w #4,d5
  7350.  and.w #$f,d4
  7351.  and.w #$f,d5
  7352.  
  7353.  move.l FloorPtBrights,a4
  7354.  move.w (a4,d4.w*8),d4
  7355.  bge.s .okpos1
  7356.  neg.w d4
  7357. .okpos1:
  7358.  sub.w #300,d4
  7359.  move.w d4,fbr
  7360.  move.w (a4,d5.w*8),d4
  7361.  bge.s .okpos2
  7362.  neg.w d4
  7363. .okpos2:
  7364.  sub.w #300,d4
  7365.  move.w d4,sbr
  7366.  
  7367.  move.w 6(a1,d1*8),d4    ;first z
  7368.  cmp.w d6,d4
  7369.  bgt firstinfrontGOUR
  7370.  move.w 6(a1,d3*8),d5    ; sec z
  7371.  cmp.w d6,d5
  7372.  ble bothbehindGOUR
  7373. ** line must be on left and partially behind.
  7374.  sub.w d5,d4
  7375.  
  7376.  move.w fbr,d0
  7377.  sub.w sbr,d0
  7378.  sub.w d5,d6
  7379.  muls d6,d0
  7380.  divs d4,d0
  7381.  add.w sbr,d0
  7382.  move.w d0,fbr
  7383.  
  7384.  move.l (a1,d1*8),d0
  7385.  sub.l (a1,d3*8),d0
  7386.  asr.l #7,d0
  7387.  muls d6,d0    ; new x coord
  7388.  divs d4,d0
  7389.  ext.l d0
  7390.  asl.l #7,d0
  7391.  
  7392.  add.l (a1,d3*8),d0
  7393.  move.w minz,d4
  7394.  move.w (a2,d3*2),d2
  7395.  divs d4,d0
  7396.  add.w MIDDLEX,d0
  7397.  move.l ypos,d3
  7398.  divs d5,d3
  7399.  
  7400.  move.w bottomline,d1 
  7401.  bra lineclippedGOUR
  7402.  
  7403. firstinfrontGOUR:
  7404.  move.w 6(a1,d3*8),d5    ; sec z
  7405.  cmp.w d6,d5
  7406.  bgt bothinfrontGOUR
  7407. ** line must be on right and partially behind.
  7408.  sub.w d4,d5    ; dz
  7409.  
  7410.  move.w sbr,d2
  7411.  sub.w fbr,d2
  7412.  sub.w d4,d6
  7413.  muls d6,d2
  7414.  divs d5,d2
  7415.  add.w fbr,d2
  7416.  move.w d2,sbr
  7417.  
  7418.  move.l (a1,d3*8),d2
  7419.  sub.l (a1,d1*8),d2    ; dx
  7420.  asr.l #7,d2
  7421.  muls d6,d2    ; new x coord
  7422.  divs d5,d2
  7423.  ext.l d2
  7424.  asl.l #7,d2
  7425.  add.l (a1,d1*8),d2
  7426.  move.w minz,d5
  7427.  move.w (a2,d1*2),d0
  7428.  divs d5,d2
  7429.  add.w MIDDLEX,d2
  7430.  move.l ypos,d1
  7431.  divs d4,d1
  7432.  move.w bottomline,d3 
  7433.  bra lineclippedGOUR
  7434.  
  7435. bothinfrontGOUR:
  7436.  
  7437. * Also, usefully enough, both are on-screen
  7438. * so no bottom clipping is needed.
  7439.  
  7440.  move.w (a2,d1*2),d0    ; first x
  7441.  move.w (a2,d3*2),d2    ; second x
  7442.  move.l ypos,d1
  7443.  move.l d1,d3
  7444.  divs d4,d1        ; first y
  7445.  divs d5,d3        ; second y
  7446. lineclippedGOUR:
  7447.  move.l #rightsidetab,a3
  7448.  cmp.w d1,d3
  7449.  bne linenotflatGOUR
  7450.  
  7451. ; move.w fbr,d4
  7452. ; move.w sbr,d5
  7453. ; cmp.w d0,d2
  7454. ; bgt.s .nsw
  7455. ; exg d4,d5
  7456. ;.nsw:
  7457.  
  7458. ; move.l #leftbrighttab,a3
  7459. ; move.w d4,(a3,d3.w)
  7460. ; move.l #rightbrighttab,a3
  7461. ; move.w d5,(a3,d3.w) 
  7462.  bra lineflatGOUR
  7463.  
  7464. linenotflatGOUR
  7465.  st drawit
  7466.  bgt lineonrightGOUR
  7467.  move.l #leftsidetab,a3
  7468.  exg d1,d3
  7469.  exg d0,d2
  7470.  
  7471.  lea (a3,d1*2),a3
  7472.  lea leftbrighttab-leftsidetab(a3),a4
  7473.  
  7474.  cmp.w top(pc),d1
  7475.  bge.s .nonewtop
  7476.  move.w d1,top
  7477. .nonewtop:
  7478.  cmp.w bottom(pc),d3
  7479.  ble.s .nonewbot
  7480.  move.w d3,bottom
  7481. .nonewbot:
  7482.  
  7483.  sub.w d1,d3    ; dy
  7484.  sub.w d0,d2    ; dx
  7485.  
  7486.  blt .linegoingleft
  7487.  
  7488.  ext.l d2
  7489.  divs d3,d2
  7490.  move.w d2,d6
  7491.  swap d2
  7492.  move.w d2,a5
  7493.  
  7494. ; moveq #0,d6
  7495. ; sub.w d3,d2
  7496. ; blt.s .noco
  7497. ;.makeco
  7498. ; addq #1,d6
  7499. ; sub.w d3,d2
  7500. ; bge.s .makeco
  7501. ;.noco
  7502. ; add.w d3,d2
  7503.  
  7504.  move.w d3,d4
  7505.  move.w d3,d5
  7506.  subq #1,d5
  7507.  move.w d6,d1
  7508.  addq #1,d1
  7509.  move.w d1,a6
  7510.  
  7511.  moveq #0,d1
  7512.  move.w sbr,d1
  7513.  move.w fbr,d2
  7514.  sub.w d1,d2
  7515.  ext.l d2
  7516.  asl.w #8,d2
  7517.  asl.w #2,d2
  7518.  divs d3,d2 
  7519.  ext.l d2
  7520.  asl.l #6,d2
  7521.  swap d1
  7522.  
  7523. .pixlopright:
  7524.  move.w d0,(a3)+
  7525.  swap d1
  7526.  move.w d1,(a4)+
  7527.  swap d1
  7528.  add.l d2,d1
  7529.  
  7530.  sub.w a5,d4
  7531.  bge.s .nobigstep
  7532.  add.w a6,d0
  7533.  add.w d3,d4
  7534.  dbra d5,.pixlopright
  7535.  bra lineflatGOUR
  7536. .nobigstep
  7537.  
  7538.  add.w d6,d0
  7539.  dbra d5,.pixlopright
  7540.  bra lineflatGOUR
  7541.  
  7542. .linegoingleft:
  7543.  
  7544.  neg.w d2
  7545.  
  7546.  ext.l d2
  7547.  divs d3,d2
  7548.  move.w d2,d6
  7549.  swap d2
  7550.  
  7551.  
  7552. ; moveq #0,d6
  7553. ; sub.w d3,d2
  7554. ; blt.s .nocol
  7555. ;.makecol
  7556. ; addq #1,d6
  7557. ; sub.w d3,d2
  7558. ; bge.s .makecol
  7559. ;.nocol
  7560. ; add.w d3,d2
  7561.  
  7562.  move.w d3,d4
  7563.  move.w d3,d5
  7564.  subq #1,d5
  7565.  
  7566.  move.w d6,d1
  7567.  addq #1,d1
  7568.  move.w d1,a6
  7569.  move.w d2,a5
  7570.  
  7571.  moveq #0,d1
  7572.  move.w sbr,d1
  7573.  move.w fbr,d2
  7574.  sub.w d1,d2
  7575.  ext.l d2
  7576.  asl.w #8,d2
  7577.  asl.w #2,d2
  7578.  divs d3,d2 
  7579.  ext.l d2
  7580.  asl.l #6,d2
  7581.  swap d1
  7582.  
  7583. .pixlopleft:
  7584.  
  7585.  swap d1
  7586.  move.w d1,(a4)+
  7587.  swap d1
  7588.  add.l d2,d1
  7589.  
  7590.  sub.w a5,d4
  7591.  bge.s .nobigstepl
  7592.  sub.w a6,d0
  7593.  add.w d3,d4
  7594.  move.w d0,(a3)+
  7595.  dbra d5,.pixlopleft
  7596.  bra lineflatGOUR
  7597.  
  7598. .nobigstepl
  7599.  sub.w d6,d0
  7600.  move.w d0,(a3)+
  7601.  dbra d5,.pixlopleft
  7602.  bra lineflatGOUR
  7603.  
  7604. lineonrightGOUR:
  7605.  
  7606.  lea (a3,d1*2),a3
  7607.  
  7608.  lea rightbrighttab-rightsidetab(a3),a4
  7609.  
  7610.  cmp.w top(pc),d1
  7611.  bge.s .nonewtop
  7612.  move.w d1,top
  7613. .nonewtop:
  7614.  cmp.w bottom(pc),d3
  7615.  ble.s .nonewbot
  7616.  move.w d3,bottom
  7617. .nonewbot:
  7618.  
  7619.  sub.w d1,d3    ; dy
  7620.  sub.w d0,d2    ; dx
  7621.  blt .linegoingleft
  7622. ; addq #1,d0
  7623.  ext.l d2
  7624.  divs d3,d2
  7625.  move.w d2,d6
  7626.  swap d2
  7627.  
  7628. ; moveq #0,d6
  7629. ; sub.w d3,d2
  7630. ; blt.s .noco
  7631. ;.makeco
  7632. ; addq #1,d6
  7633. ; sub.w d3,d2
  7634. ; bge.s .makeco
  7635. ;.noco
  7636. ; add.w d3,d2
  7637.  
  7638.  move.w d3,d4
  7639.  move.w d3,d5
  7640.  subq #1,d5
  7641.  move.w d6,d1
  7642.  addq #1,d1
  7643.  
  7644.  move.w d1,a6
  7645.  move.w d2,a5
  7646.  
  7647.  moveq #0,d1
  7648.  move.w fbr,d1
  7649.  move.w sbr,d2
  7650.  sub.w d1,d2
  7651.  ext.l d2
  7652.  asl.w #8,d2
  7653.  asl.w #2,d2
  7654.  divs d3,d2 
  7655.  ext.l d2
  7656.  asl.l #6,d2
  7657.  swap d1
  7658.  
  7659. .pixlopright:
  7660.  
  7661.  swap d1
  7662.  move.w d1,(a4)+
  7663.  swap d1
  7664.  add.l d2,d1
  7665.  
  7666.  sub.w a5,d4
  7667.  bge.s .nobigstep
  7668.  add.w a6,d0
  7669.  add.w d3,d4
  7670.  move.w d0,(a3)+
  7671.  dbra d5,.pixlopright
  7672.  bra lineflatGOUR
  7673.  
  7674. .nobigstep
  7675.  add.w d6,d0
  7676.  move.w d0,(a3)+
  7677.  dbra d5,.pixlopright
  7678.  bra lineflatGOUR
  7679.  
  7680. .linegoingleft:
  7681. ; addq #1,d0
  7682.  neg.w d2
  7683.  
  7684.  ext.l d2
  7685.  divs d3,d2
  7686.  move.w d2,d6
  7687.  swap d2
  7688.  
  7689.  
  7690. ; moveq #0,d6
  7691. ; sub.w d3,d2
  7692. ; blt.s .nocol
  7693. ;.makecol
  7694. ; addq #1,d6
  7695. ; sub.w d3,d2
  7696. ; bge.s .makecol
  7697. ;.nocol
  7698. ; add.w d3,d2
  7699.  
  7700.  move.w d3,d4
  7701.  move.w d3,d5
  7702.  subq #1,d5
  7703.  move.w d6,d1
  7704.  addq #1,d1
  7705.  move.w d1,a6
  7706.  move.w d2,a5
  7707.  
  7708.  moveq #0,d1
  7709.  move.w fbr,d1
  7710.  move.w sbr,d2
  7711.  sub.w d1,d2
  7712.  ext.l d2
  7713.  asl.w #8,d2
  7714.  asl.w #2,d2
  7715.  divs d3,d2 
  7716.  ext.l d2
  7717.  asl.l #6,d2
  7718.  swap d1
  7719.  
  7720. .pixlopleft:
  7721.  
  7722.  swap d1
  7723.  move.w d1,(a4)+
  7724.  swap d1
  7725.  add.l d2,d1
  7726.  
  7727.  move.w d0,(a3)+
  7728.  sub.w a5,d4
  7729.  bge.s .nobigstepl
  7730.  sub.w a6,d0
  7731.  add.w d3,d4
  7732.  dbra d5,.pixlopleft
  7733.  bra lineflatGOUR
  7734.  
  7735. .nobigstepl
  7736.  sub.w d6,d0
  7737.  dbra d5,.pixlopleft
  7738.  
  7739. lineflatGOUR:
  7740.  
  7741. bothbehindGOUR:
  7742.  dbra d7,sideloopGOUR
  7743.  
  7744. pastsides:
  7745.  
  7746.  addq #2,a0
  7747.  
  7748.  move.w #320,linedir
  7749.  
  7750. ; move.l FASTBUFFER2,a6
  7751. ; add.l BIGMIDDLEY,a6
  7752. ; move.l a6,REFPTR
  7753.  
  7754.  move.l FASTBUFFER,a6
  7755.  add.l BIGMIDDLEY,a6
  7756.  move.w (a0)+,d6
  7757.  add.w SMALLIT,d6
  7758.  move.w d6,scaleval
  7759.  move.w (a0)+,whichtile
  7760.  move.w (a0)+,d6
  7761.  add.w ZoneBright,d6
  7762.  move.w d6,lighttype
  7763.  move.w above(pc),d6
  7764.  beq groundfloor
  7765. * on ceiling:
  7766.  move.w #-320,linedir
  7767.  suba.w #320,a6
  7768. groundfloor:
  7769.  
  7770.  move.w xoff,d6
  7771.  move.w zoff,d7
  7772.  add.w xwobxoff,d7
  7773.  add.w xwobzoff,d6
  7774.  ext.l d6
  7775.  ext.l d7
  7776.  
  7777.  tst.b FULLSCR
  7778.  beq.s .shiftit
  7779.  
  7780.  add.l d6,d6
  7781.  add.l d7,d7
  7782.  divs #3,d6
  7783.  divs #3,d7
  7784.  
  7785. .shiftit
  7786.  
  7787. ; divs #3,d6
  7788. ; divs #3,d7
  7789.  asr.w #1,d6
  7790.  asr.w #1,d7
  7791.  swap d6
  7792.  swap d7
  7793.  clr.w d6
  7794.  clr.w d7
  7795.  move.w scaleval(pc),d3
  7796.  beq.s .samescale
  7797.  bgt.s .scaledown
  7798.  neg.w d3
  7799.  asr.l d3,d7
  7800.  asr.l d3,d6
  7801.  bra.s .samescale
  7802. .scaledown:
  7803.  asl.l d3,d6
  7804.  asl.l d3,d7
  7805. .samescale
  7806.  move.l d6,sxoff
  7807.  move.l d7,szoff
  7808.  bra pastscale 
  7809.  
  7810.  asr.l #3,d1
  7811.  asr.l #3,d2
  7812.  asr.l #2,d1
  7813.  asr.l #2,d2
  7814.  asr.l #1,d1
  7815.  asr.l #1,d2
  7816. scaleprogfrom
  7817.  nop
  7818.  nop
  7819.  asl.l #1,d1
  7820.  asl.l #1,d2
  7821.  asl.l #2,d1
  7822.  asl.l #2,d2
  7823.  asl.l #3,d1
  7824.  asl.l #3,d2
  7825.  
  7826. top: dc.w 0
  7827. bottom: dc.w 0
  7828. ypos: dc.l 0
  7829. nfloors: dc.w 0
  7830. lighttype: dc.w 0
  7831. above: dc.w 0 
  7832. linedir: dc.w 0
  7833. distaddr: dc.w 0
  7834.  
  7835. minz: dc.l 0
  7836.  
  7837. leftsidetab:
  7838.  ds.w 512*2
  7839. rightsidetab:
  7840.  ds.w 512*2
  7841. leftbrighttab:
  7842.  ds.w 512*2
  7843. rightbrighttab:
  7844.  ds.w 512*2
  7845.  
  7846. PointBrights:
  7847.  dc.l 0
  7848. CurrentPointBrights:
  7849.  ds.l 2*256*10
  7850.  
  7851. movespd: dc.w 0
  7852. largespd: dc.l 0
  7853. disttobot: dc.w 0
  7854.  
  7855. pastscale:
  7856.  
  7857.  
  7858.  tst.b drawit(pc)
  7859.  beq dontdrawfloor
  7860.  
  7861.  tst.b DOUBLEHEIGHT
  7862.  beq pix1h
  7863.  
  7864.  move.l a0,-(a7)
  7865.  move.w linedir,d1
  7866.  add.w d1,linedir
  7867.  
  7868.  move.l #leftsidetab,a4
  7869.  move.w top(pc),d1
  7870.  tst.w above
  7871.  beq.s .clipfloor
  7872.  
  7873.  sub.w #320,a6
  7874.  
  7875.  move.w MIDDLEY,d7
  7876.  subq #1,d7
  7877.  sub.w d1,d7
  7878.  move.w d7,disttobot
  7879.  
  7880.  move.w bottom(pc),d7
  7881.  move.w MIDDLEY,d3
  7882.  move.w d3,d4
  7883.  sub.w topclip,d3
  7884.  sub.w botclip,d4
  7885.  cmp.w d3,d1
  7886.  bge predontdrawfloor
  7887.  cmp.w d4,d7
  7888.  blt predontdrawfloor
  7889.  cmp.w d4,d1
  7890.  bge.s .nocliptoproof
  7891.  move.w d4,d1
  7892. .nocliptoproof
  7893.  cmp.w d3,d7
  7894.  blt .doneclip
  7895.  move.w d3,d7
  7896.  bra .doneclip
  7897.  
  7898. .clipfloor:
  7899.  move.w BOTTOMY,d7
  7900.  sub.w MIDDLEY,d7
  7901.  subq #1,d7
  7902.  sub.w d1,d7
  7903.  move.w d7,disttobot
  7904.  
  7905.  move.w bottom(pc),d7
  7906.  move.w botclip,d4
  7907.  sub.w MIDDLEY,d4
  7908.  cmp.w d4,d1
  7909.  bge predontdrawfloor
  7910.  move.w topclip,d3
  7911.  sub.w MIDDLEY,d3
  7912.  cmp.w d3,d1
  7913.  bge.s .nocliptopfloor
  7914.  move.w d3,d1
  7915. .nocliptopfloor 
  7916.  cmp.w d3,d7
  7917.  ble predontdrawfloor
  7918.  cmp.w d4,d7
  7919.  blt.s .noclipbotfloor
  7920.  move.w d4,d7
  7921. .noclipbotfloor:
  7922.  
  7923. .doneclip:
  7924.  
  7925.  lea (a4,d1*2),a4
  7926.  addq #1,d7
  7927.  sub.w d1,d7
  7928.  
  7929. ;moveq #0,d0
  7930.  asr.w #1,d1
  7931. ; addx d0,d1
  7932.  
  7933. ; move.l #dists,a2
  7934.  move.w distaddr,d0
  7935.  muls #64,d0
  7936.  move.l d0,a2
  7937. ; muls #25,d0
  7938. ; adda.w d0,a2
  7939. ; lea (a2,d1*2),a2
  7940.  asr.w #1,d7
  7941.  ble predontdrawfloor 
  7942.  move.w d1,d0
  7943.  bne.s .notzero
  7944.  moveq #1,d0
  7945. .notzero
  7946.  add.w d0,d0
  7947.  muls linedir,d1
  7948.  add.l d1,a6
  7949. ; sub.l d1,REFPTR
  7950.  move.l #floorscalecols,a1
  7951.  move.l LineToUse,a5
  7952.  
  7953.  move.w #4,tonextline
  7954.  
  7955.  bra pix2h
  7956.  
  7957. pix1h:
  7958.  
  7959.  move.l a0,-(a7)
  7960.  
  7961.  move.l #leftsidetab,a4
  7962.  move.w top(pc),d1
  7963.   
  7964.  tst.w above
  7965.  beq.s clipfloor
  7966.  
  7967.  move.w MIDDLEY,d7
  7968.  subq #1,d7
  7969.  sub.w d1,d7
  7970.  move.w d7,disttobot
  7971.  
  7972.  move.w bottom(pc),d7
  7973.  move.w MIDDLEY,d3
  7974.  move.w d3,d4
  7975.  sub.w topclip,d3
  7976.  sub.w botclip,d4
  7977.  cmp.w d3,d1
  7978.  bge predontdrawfloor
  7979.  cmp.w d4,d7
  7980.  blt predontdrawfloor
  7981.  cmp.w d4,d1
  7982.  bge.s .nocliptoproof
  7983.  move.w d4,d1
  7984. .nocliptoproof
  7985.  cmp.w d3,d7
  7986.  blt doneclip
  7987.  move.w d3,d7
  7988.  bra doneclip
  7989.  
  7990. clipfloor:
  7991.  move.w BOTTOMY,d7
  7992.  sub.w MIDDLEY,d7
  7993.  subq #1,d7
  7994.  sub.w d1,d7
  7995.  move.w d7,disttobot
  7996.  
  7997.  move.w bottom(pc),d7
  7998.  move.w botclip,d4
  7999.  sub.w MIDDLEY,d4
  8000.  cmp.w d4,d1
  8001.  bge predontdrawfloor
  8002.  move.w topclip,d3
  8003.  sub.w MIDDLEY,d3
  8004.  cmp.w d3,d1
  8005.  bge.s .nocliptopfloor
  8006.  move.w d3,d1
  8007. .nocliptopfloor 
  8008.  cmp.w d3,d7
  8009.  ble predontdrawfloor
  8010.  cmp.w d4,d7
  8011.  blt.s .noclipbotfloor
  8012.  move.w d4,d7
  8013. .noclipbotfloor:
  8014.  
  8015. doneclip:
  8016.  
  8017.  lea (a4,d1*2),a4
  8018. ; move.l #dists,a2
  8019.  move.w distaddr,d0
  8020.  muls #64,d0
  8021.  move.l d0,a2
  8022. ; muls #25,d0
  8023. ; adda.w d0,a2
  8024. ; lea (a2,d1*2),a2
  8025.  sub.w d1,d7
  8026.  ble predontdrawfloor 
  8027.  move.w d1,d0
  8028.  bne.s .notzero
  8029.  moveq #1,d0
  8030. .notzero
  8031.  muls linedir,d1
  8032.  add.l d1,a6
  8033. ; sub.l d1,REFPTR
  8034.  move.l #floorscalecols,a1
  8035.  move.l LineToUse,a5
  8036.  
  8037.  move.w #2,tonextline
  8038.  
  8039. pix2h:
  8040.  
  8041.  tst.b gourfloor
  8042.  bne dogourfloor
  8043.  
  8044.  tst.b anyclipping
  8045.  beq dofloornoclip
  8046.  
  8047. dofloor:
  8048. ; move.w (a2)+,d0
  8049.  move.w leftclip,d3
  8050.  move.w rightclip,d4
  8051.  move.w rightsidetab-leftsidetab(a4),d2
  8052.  
  8053.  addq #1,d2
  8054.  cmp.w d3,d2
  8055.  ble.s nodrawline
  8056.  cmp.w d4,d2
  8057.  ble.s noclipright
  8058.  move.w d4,d2
  8059. noclipright:
  8060.  move.w (a4),d1
  8061.  cmp.w d4,d1
  8062.  bge.s nodrawline
  8063.  cmp.w d3,d1
  8064.  bge.s noclipleft
  8065.  move.w d3,d1
  8066. noclipleft:
  8067.  cmp.w d1,d2
  8068.  ble.s nodrawline
  8069.  
  8070.  move.w d1,leftedge
  8071.  move.w d2,rightedge
  8072.  
  8073. ; moveq #0,d1
  8074. ; moveq #0,d3
  8075. ; move.w leftbrighttab-leftsidetab(a4),d1
  8076. ; bge.s .okbl
  8077. ; moveq #0,d1
  8078. ;.okbl:
  8079.  
  8080. ; move.w rightbrighttab-leftsidetab(a4),d3
  8081. ; bge.s .okbr
  8082. ; moveq #0,d3
  8083. ;.okbr:
  8084.  
  8085. ; sub.w d1,d3
  8086. ; asl.w #8,d1
  8087. ; move.l d1,leftbright
  8088. ; swap d3
  8089. ; asr.l #5,d3
  8090. ; divs d5,d3
  8091. ; move.w d3,d5
  8092. ; muls.w d6,d5
  8093. ; asr.l #3,d5
  8094. ; clr.b d5
  8095. ; add.w d5,leftbright+2
  8096.  
  8097. ; ext.l d3
  8098. ; asl.l #5,d3
  8099. ; swap d3
  8100. ; asl.w #8,d3
  8101. ; move.l d3,brightspd
  8102.  
  8103.  move.l a6,a3
  8104.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  8105.  move.l a2,d7
  8106.  divs d0,d7
  8107.  move.w d7,d0
  8108.  jsr (a5)
  8109.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  8110. nodrawline
  8111.  sub.w #1,disttobot
  8112.  move.w linedir(pc),d3
  8113.  adda.w d3,a6
  8114. ; ext.l d3
  8115. ; sub.l d3,REFPTR
  8116.  move.w tonextline,d3
  8117.  add.w d3,a4
  8118.  asr.w #1,d3
  8119.  add.w d3,d0
  8120.  subq #1,d7
  8121.  bgt dofloor
  8122.  
  8123. predontdrawfloor
  8124.  move.l (a7)+,a0
  8125.  
  8126. dontdrawfloor:
  8127.  
  8128.  rts
  8129.  
  8130. tonextline: dc.w 0
  8131. anyclipping: dc.w 0
  8132.  
  8133. dofloornoclip:
  8134. ; move.w (a2)+,d0
  8135.  move.w rightsidetab-leftsidetab(a4),d2
  8136.  addq #1,d2
  8137.  move.w (a4),d1
  8138.  move.w d1,leftedge
  8139.  move.w d2,rightedge
  8140.  
  8141. ; sub.w d1,d2
  8142.  
  8143. ; moveq #0,d1
  8144. ; moveq #0,d3
  8145. ; move.w leftbrighttab-leftsidetab(a4),d1
  8146. ; bge.s .okbl
  8147. ; moveq #0,d1
  8148. ;.okbl:
  8149.  
  8150. ; move.w rightbrighttab-leftsidetab(a4),d3
  8151. ; bge.s .okbr
  8152. ; moveq #0,d3
  8153. ;.okbr:
  8154.  
  8155. ; sub.w d1,d3
  8156. ; asl.w #8,d1
  8157. ; move.l d1,leftbright
  8158. ; swap d3
  8159. ; asr.l #5,d3
  8160. ; divs d2,d3
  8161. ; ext.l d3
  8162. ; asl.l #5,d3
  8163. ; swap d3
  8164. ; asl.w #8,d3
  8165. ; move.l d3,brightspd
  8166.  
  8167.  move.l a6,a3
  8168.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  8169.  move.l a2,d7
  8170.  divs d0,d7
  8171.  move.w d7,d0
  8172.  jsr (a5)
  8173.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  8174.  sub.w #1,disttobot
  8175.  move.w linedir(pc),d3
  8176.  adda.w d3,a6
  8177. ; ext.l d3
  8178. ; sub.l d3,REFPTR
  8179.  move.w tonextline,d3
  8180.  add.w d3,a4
  8181.  asr.w #1,d3
  8182.  add.w d3,d0
  8183.  subq #1,d7
  8184.  bgt dofloornoclip
  8185.  
  8186.  bra predontdrawfloor
  8187.  
  8188. dogourfloor:
  8189.  tst.b anyclipping
  8190.  beq dofloornoclipGOUR
  8191.  
  8192. dofloorGOUR:
  8193. ; move.w (a2)+,d0
  8194.  move.w leftclip,d3
  8195.  move.w rightclip,d4
  8196.  move.w rightsidetab-leftsidetab(a4),d2
  8197.  
  8198.  move.w d2,d5
  8199.  sub.w (a4),d5
  8200.  addq #1,d5
  8201.  moveq #0,d6
  8202.  
  8203.  addq #1,d2
  8204.  cmp.w d3,d2
  8205.  ble nodrawlineGOUR
  8206.  cmp.w d4,d2
  8207.  ble.s nocliprightGOUR
  8208.  move.w d4,d2
  8209. nocliprightGOUR:
  8210.  move.w (a4),d1
  8211.  cmp.w d4,d1
  8212.  bge nodrawlineGOUR
  8213.  cmp.w d3,d1
  8214.  bge.s noclipleftGOUR
  8215.  move.w d3,d6
  8216.  subq #1,d6
  8217.  sub.w d1,d6
  8218.  move.w d3,d1
  8219. noclipleftGOUR:
  8220.  cmp.w d1,d2
  8221.  ble nodrawlineGOUR
  8222.  
  8223.  move.w d1,leftedge
  8224.  move.w d2,rightedge
  8225.  
  8226.  move.l a2,d2
  8227.  divs d0,d2
  8228.  move.w d2,dst
  8229.  asr.w #7,d2
  8230. ; addq #5,d2
  8231. ; add.w lighttype,d2
  8232.  
  8233.  moveq #0,d1
  8234.  moveq #0,d3
  8235.  move.w leftbrighttab-leftsidetab(a4),d1
  8236.  add.w d2,d1
  8237.  bge.s .okbl
  8238.  moveq #0,d1
  8239. .okbl:
  8240. ; asr.w #1,d1
  8241.  cmp.w #31,d1
  8242.  ble.s .okdl
  8243.  move.w #31,d1
  8244. .okdl:
  8245.  
  8246.  move.w rightbrighttab-leftsidetab(a4),d3
  8247.  add.w d2,d3
  8248.  bge.s .okbr
  8249.  moveq #0,d3
  8250. .okbr:
  8251. ; asr.w #1,d3
  8252.  cmp.w #31,d3
  8253.  ble.s .okdr
  8254.  move.w #31,d3
  8255. .okdr:
  8256.  
  8257.  sub.w d1,d3
  8258.  asl.w #8,d1
  8259.  move.w d1,leftbright
  8260.  swap d3
  8261.  tst.l d3
  8262.  bgt.s .OKITSPOSALREADY 
  8263.  neg.l d3
  8264.  asr.l #6,d3
  8265.  divs d5,d3
  8266.  neg.w d3
  8267.  bra.s .OKNOWITSNEG
  8268.  
  8269. .OKITSPOSALREADY
  8270.  asr.l #6,d3
  8271.  divs d5,d3
  8272. .OKNOWITSNEG
  8273.  muls d3,d6
  8274.  add.w #256*4,d6
  8275.  asr.w #2,d6
  8276.  clr.b d6
  8277.  add.w leftbright,d6
  8278.  bge.s .oklbnn
  8279.  moveq #0,d6
  8280. .oklbnn:
  8281.  move.w d6,leftbright
  8282.  
  8283.  ext.l d3
  8284.  asr.l #2,d3
  8285. ; swap d3
  8286. ; asl.w #8,d3
  8287.  move.w d3,brightspd
  8288.  
  8289.  move.l a6,a3
  8290.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  8291.  move.w dst,d0
  8292.  lea floorscalecols,a1
  8293.  move.l floortile,a0
  8294.  adda.w whichtile,a0
  8295.  jsr pastfloorbright
  8296.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  8297. nodrawlineGOUR
  8298.  
  8299.  sub.w #1,disttobot
  8300.  
  8301.  move.w linedir(pc),d3
  8302.  adda.w d3,a6
  8303. ; ext.l d3
  8304. ; sub.l d3,REFPTR
  8305.  move.w tonextline,d3
  8306.  add.w d3,a4
  8307.  asr.w #1,d3
  8308.  add.w d3,d0
  8309.  subq #1,d7
  8310.  bgt dofloorGOUR
  8311.  
  8312. predontdrawfloorGOUR
  8313.  move.l (a7)+,a0
  8314.  
  8315. dontdrawfloorGOUR:
  8316.  
  8317.  rts
  8318.  
  8319. REFPTR: dc.l 0
  8320.  
  8321. dofloornoclipGOUR:
  8322. ; move.w (a2)+,d0
  8323.  move.w rightsidetab-leftsidetab(a4),d2
  8324.  addq #1,d2
  8325.  move.w (a4),d1
  8326.  move.w d1,leftedge
  8327.  move.w d2,rightedge
  8328.  
  8329.  sub.w d1,d2
  8330.  
  8331.  move.l a2,d6
  8332.  divs d0,d6
  8333.  move.w d6,d5
  8334.  asr.w #7,d5
  8335. ; addq #5,d5
  8336. ; add.w lighttype,d5
  8337.  
  8338.  moveq #0,d1
  8339.  moveq #0,d3
  8340.  move.w leftbrighttab-leftsidetab(a4),d1
  8341.  add.w d5,d1
  8342.  bge.s .okbl
  8343.  moveq #0,d1
  8344. .okbl:
  8345. ; asr.w #1,d1
  8346.  cmp.w #31,d1
  8347.  ble.s .okdl
  8348.  move.w #31,d1
  8349. .okdl:
  8350.  
  8351.  move.w rightbrighttab-leftsidetab(a4),d3
  8352.  add.w d5,d3
  8353.  bge.s .okbr
  8354.  moveq #0,d3
  8355. .okbr:
  8356. ; asr.w #1,d3
  8357.  cmp.w #31,d3
  8358.  ble.s .okdr
  8359.  move.w #31,d3
  8360. .okdr:
  8361.  
  8362. ; sub.w d1,d3
  8363. ; asl.w #8,d1
  8364. ; move.l d1,leftbright
  8365. ; swap d3
  8366. ; asr.l #5,d3
  8367. ; divs d2,d3
  8368. ; ext.l d3
  8369. ; asl.l #5,d3
  8370. ; swap d3
  8371. ; asl.w #8,d3
  8372. ; move.l d3,brightspd
  8373.  
  8374.  sub.w d1,d3
  8375.  asl.w #8,d1
  8376.  move.w d1,leftbright
  8377.  swap d3
  8378.  ext.l d2
  8379.  divs.l d2,d3
  8380.  asr.l #8,d3
  8381.  move.w d3,brightspd
  8382.  
  8383.  move.l a6,a3
  8384.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  8385.  move.w d6,d0
  8386.  move.w d0,dst
  8387.  lea floorscalecols,a1
  8388.  move.l floortile,a0
  8389.  adda.w whichtile,a0
  8390.  jsr pastfloorbright
  8391.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  8392.  sub.w #1,disttobot
  8393.  
  8394.  move.w linedir(pc),d3
  8395.  adda.w d3,a6
  8396. ; ext.l d3
  8397. ; sub.l d3,REFPTR
  8398.  
  8399.  move.w tonextline,d3
  8400.  add.w d3,a4
  8401.  asr.w #1,d3
  8402.  add.w d3,d0
  8403.  subq #1,d7
  8404.  bgt dofloornoclipGOUR
  8405.  
  8406.  bra predontdrawfloorGOUR
  8407.  
  8408.  
  8409.  
  8410. dists:
  8411. ; incbin "floordists"
  8412. drawit: dc.w 0
  8413.  
  8414. LineToUse: dc.l 0
  8415.  
  8416. ***************************
  8417. * Right then, time for the floor
  8418. * routine...
  8419. * For test purposes, give it
  8420. * a3 = point to screen
  8421. * d0= z distance away
  8422. * and sinval+cosval must be set up.
  8423. ***************************
  8424.  
  8425. BLACKFLOOR:
  8426.  moveq #0,d0
  8427.  bra.s DOBLACK
  8428.  
  8429. SimpleFloorLine:
  8430.  
  8431.  CACHE_OFF d2
  8432.  
  8433.  move.l #doacrossline,a1
  8434.  move.w leftedge(pc),d1
  8435.  move.w rightedge(pc),d3
  8436.  sub.w d1,d3
  8437.  lea (a1,d1.w*4),a1
  8438.  move.w (a1,d3.w*4),d4
  8439.  move.w #$4e75,(a1,d3.w*4)
  8440.  
  8441.  tst.b CLRNOFLOOR
  8442.  bne.s BLACKFLOOR
  8443.  
  8444.  move.l #PLAINSCALE,a2
  8445.  
  8446.  move.w d0,d2
  8447.  move.w lighttype,d1
  8448.  asr.w #8,d2
  8449.  add.w #5,d1
  8450.  add.w d2,d1
  8451.  bge.s .fixedbright
  8452.  moveq #0,d1
  8453. .fixedbright:
  8454.  cmp.w #28,d1
  8455.  ble.s .smallbright
  8456.  move.w #28,d1
  8457. .smallbright:
  8458.  lea (a2,d1.w*2),a2
  8459.  
  8460.  move.w whichtile,d0
  8461.  move.w d0,d1
  8462.  and.w #$3,d1
  8463.  and.w #$300,d0
  8464.  lsl.b #6,d1
  8465.  move.b d1,d0
  8466.  move.w d0,tstwhich
  8467.  move.w (a2,d0.w),d0
  8468.  
  8469. DOBLACK:
  8470.  jsr (a1)
  8471.  move.w d4,(a1,d3.w*4)
  8472.  
  8473.  CACHE_ON d2
  8474.  
  8475.  rts
  8476.  
  8477. tstwhich: dc.w 0
  8478. whichtile: dc.w 0
  8479.   
  8480. PLAINSCALE: incbin "ab3:includes/plainscale"
  8481.   
  8482. storeit: dc.l 0
  8483.  
  8484. doacrossline:
  8485. val SET 0
  8486.  REPT 32
  8487.  move.w d0,val(a3)
  8488. val SET val+4
  8489.  ENDR
  8490. val SET val+4
  8491.  REPT 32
  8492.  move.w d0,val(a3)
  8493. val SET val+4
  8494.  ENDR
  8495. val SET val+4
  8496.  REPT 32
  8497.  move.w d0,val(a3)
  8498. val SET val+4
  8499.  ENDR
  8500.  rts
  8501.  
  8502.  
  8503. leftedge: dc.w 0
  8504. rightedge: dc.w 0
  8505.  
  8506. rndpt: dc.l rndtab
  8507.  
  8508.  
  8509. dst: dc.w 0
  8510.  
  8511. FloorLine:
  8512.  
  8513.  move.l floortile,a0
  8514.  adda.w whichtile,a0
  8515.  move.w lighttype,d1
  8516.  move.w d0,dst
  8517.  move.w d0,d2
  8518. *********************
  8519. * Old version
  8520.  asr.w #8,d2
  8521.  add.w #5,d1
  8522. *********************
  8523. ; asr.w #3,d2
  8524. ; sub.w #4,d2
  8525. ; cmp.w #6,d2
  8526. ; blt.s flbrbr
  8527. ; move.w #6,d2
  8528. ;flbrbr:
  8529. *********************
  8530.  add.w d2,d1
  8531.  bge.s .fixedbright
  8532.  moveq #0,d1
  8533. .fixedbright:
  8534.  cmp.w #28,d1
  8535.  ble.s .smallbright
  8536.  move.w #28,d1
  8537. .smallbright:
  8538.  lea floorscalecols,a1
  8539.  add.l floorbright(pc,d1.w*4),a1
  8540.  bra pastfloorbright
  8541.  
  8542. ConstCol: dc.w 0
  8543.  
  8544. BumpLine:
  8545.  
  8546.  tst.b smoothbumps
  8547.  beq.s Chunky
  8548.  
  8549.  move.l #SmoothTile,a0
  8550.  lea Smoothscalecols,a1
  8551.  bra pastast
  8552.  
  8553. Chunky:
  8554.  
  8555.  moveq #0,d2
  8556.  move.l #Bumptile,a0
  8557.  move.w whichtile,d2
  8558.  adda.w d2,a0
  8559.  ror.l #2,d2
  8560.  lsr.w #6,d2
  8561.  rol.l #2,d2
  8562.  and.w #15,d2
  8563.  move.l #ConstCols,a1
  8564.  move.w (a1,d2.w*2),ConstCol
  8565.  lea Bumpscalecols,a1
  8566.  
  8567. pastast:
  8568.  move.w lighttype,d1
  8569.  
  8570.  move.w d0,dst
  8571.  
  8572.  move.w d0,d2
  8573. *********************
  8574. * Old version
  8575.  asr.w #8,d2
  8576.  add.w #5,d1
  8577. *********************
  8578. ; asr.w #3,d2
  8579. ; sub.w #4,d2
  8580. ; cmp.w #6,d2
  8581. ; blt.s flbrbr
  8582. ; move.w #6,d2
  8583. ;flbrbr:
  8584. *********************
  8585.  add.w d2,d1
  8586.  bge.s .fixedbright
  8587.  moveq #0,d1
  8588. .fixedbright:
  8589.  cmp.w #31,d1
  8590.  ble.s .smallbright
  8591.  move.w #31,d1
  8592. .smallbright:
  8593.  add.l floorbright(pc,d1.w*4),a1
  8594.  bra pastfloorbright
  8595.  
  8596.  
  8597. floorbright:
  8598.  dc.l 512*0
  8599.  dc.l 512*1
  8600.  dc.l 512*2
  8601.  dc.l 512*3
  8602.  dc.l 512*4
  8603.  
  8604.  dc.l 512*5
  8605.  dc.l 512*6
  8606.  dc.l 512*7
  8607.  dc.l 512*8
  8608.  dc.l 512*9
  8609.  
  8610.  dc.l 512*10
  8611.  dc.l 512*11
  8612.  dc.l 512*12
  8613.  dc.l 512*13
  8614.  dc.l 512*14
  8615.  
  8616.  dc.l 512*15
  8617.  dc.l 512*16
  8618.  dc.l 512*17
  8619.  dc.l 512*18
  8620.  dc.l 512*19
  8621.  
  8622.  dc.l 512*20
  8623.  dc.l 512*21
  8624.  dc.l 512*22
  8625.  dc.l 512*23
  8626.  dc.l 512*24
  8627.  
  8628.  dc.l 512*25
  8629.  dc.l 512*26
  8630.  dc.l 512*27
  8631.  dc.l 512*28
  8632.  dc.l 512*29
  8633.  
  8634.  dc.l 512*30
  8635.  dc.l 512*31
  8636.  
  8637. widthleft: dc.w 0
  8638. scaleval: dc.w 0
  8639. sxoff: dc.l 0
  8640. szoff: dc.l 0
  8641. xoff34: dc.w 0
  8642. zoff34: dc.w 0
  8643. scosval: dc.w 0
  8644. ssinval: dc.w 0
  8645.  
  8646.  
  8647. floorsetbright:
  8648.  move.l #walltiles,a0
  8649.  
  8650. pastfloorbright:
  8651.  
  8652.  
  8653.  move.w d0,d1
  8654.  muls cosval,d1    ; change in x across whole width
  8655.  move.w d0,d2
  8656.  muls sinval,d2    ; change in z across whole width
  8657.  neg.l d2
  8658. scaleprog:
  8659.  move.w scaleval(pc),d3
  8660.  beq.s .samescale
  8661.  bgt.s .scaledown
  8662.  neg.w d3
  8663.  asr.l d3,d1
  8664.  asr.l d3,d2
  8665.  bra.s .samescale
  8666. .scaledown:
  8667.  asl.l d3,d1
  8668.  asl.l d3,d2
  8669. .samescale
  8670.  
  8671.  move.l d1,d3 ;    z cos
  8672.  move.l d3,d6
  8673.  move.l d3,d5
  8674.  asr.l #1,d6
  8675.  add.l d6,d3
  8676.  asr.l #1,d3
  8677.  
  8678.  move.l d2,d4    ; z sin
  8679.  move.l d4,d6
  8680.  asr.l #1,d6
  8681.  add.l d4,d6
  8682.  add.l d3,d4
  8683.  neg.l d4    ; start x
  8684.  
  8685.  asr.l #1,d6    ; zsin/2
  8686.  sub.l d6,d5    ; start z
  8687.  
  8688.  add.l sxoff,d4
  8689.  add.l szoff,d5
  8690.  
  8691.  
  8692.  tst.b FULLSCR
  8693.  beq.s .nob
  8694.  
  8695.  moveq #0,d6
  8696.  move.w leftedge(pc),d6
  8697.  beq.s .nomultleftB
  8698.  
  8699.  add.l d6,d6
  8700.  divs #3,d6
  8701.  ext.l d6
  8702.  
  8703.  move.l d1,a4
  8704.  move.l d2,a5
  8705.  
  8706.  muls.l d6,d3:d1
  8707.  asr.l #7,d1
  8708.  add.l d1,d4
  8709.  
  8710.  muls.l d6,d3:d2
  8711.  asr.l #7,d2
  8712.  add.l d2,d5
  8713.  move.l a4,d1
  8714.  move.l a5,d2
  8715.  
  8716.  move.w leftedge(pc),d6
  8717.  
  8718. .nomultleftB:
  8719.  
  8720.  move.w d4,startsmoothx
  8721.  move.w d5,startsmoothz
  8722.  
  8723.  asr.l #8,d4
  8724.  asl.l #8,d5
  8725. ; add.w szoff,d5
  8726. ; add.w sxoff,d4
  8727. ; and.w #63,d4
  8728. ; and.w #63*256,d5
  8729.  
  8730.  move.w d4,d5
  8731.  
  8732.  asr.l #6,d1
  8733.  asr.l #6,d2
  8734.  divs.l #3,d1
  8735.  divs.l #3,d2
  8736.  
  8737.  bra.s doneallmult
  8738.  
  8739. .nob 
  8740.  
  8741.  moveq #0,d6
  8742.  move.w leftedge(pc),d6
  8743.  beq.s nomultleft
  8744.  
  8745.  move.l d1,a4
  8746.  move.l d2,a5
  8747.  
  8748.  muls.l d6,d3:d1
  8749.  asr.l #7,d1
  8750.  add.l d1,d4
  8751.  
  8752.  muls.l d6,d3:d2
  8753.  asr.l #7,d2
  8754.  add.l d2,d5
  8755.  move.l a4,d1
  8756.  move.l a5,d2
  8757.  
  8758.  move.w leftedge(pc),d6
  8759.  
  8760. nomultleft:
  8761.  
  8762.  move.w d4,startsmoothx
  8763.  move.w d5,startsmoothz
  8764.  
  8765.  asr.l #8,d4
  8766.  asl.l #8,d5
  8767. ; add.w szoff,d5
  8768. ; add.w sxoff,d4
  8769. ; and.w #63,d4
  8770. ; and.w #63*256,d5
  8771.  
  8772.  move.w d4,d5
  8773.  
  8774.  asr.l #7,d1
  8775.  asr.l #7,d2
  8776. ; divs.l #3,d1
  8777. ; divs.l #3,d2
  8778.  
  8779. doneallmult:
  8780.  
  8781.  move.w d1,a4
  8782.  move.w d2,a5
  8783.  asl.l #8,d2
  8784. ; and.w #%0011111100000000,d2
  8785.  asr.l #8,d1
  8786.  move.w d1,d2
  8787.  move.l #$3fff3fff,d1
  8788.  and.l d1,d5
  8789. ; swap d5
  8790. ; move.w startsmoothz,d5
  8791. ; swap d5
  8792. ; swap d2
  8793. ; move.w a5,d2
  8794. ; swap d2
  8795.  
  8796. ***********************************
  8797.  
  8798.  tst.b DOUBLEWIDTH
  8799.  beq.s .nodoub
  8800.  
  8801.  and.b #$fe,d6
  8802.  
  8803.  move.w d6,a2
  8804.  moveq #0,d0 
  8805.  move.w rightedge(pc),d3 
  8806.  lea (a3,a2.w),a3 
  8807.  move.w d3,d7
  8808.  sub.w a2,d7
  8809.  asr.w #1,d7
  8810.  move.w startsmoothx,d3
  8811.  
  8812.  tst.b usewater
  8813.  bne texturedwaterDOUB
  8814. ; tst.b gourfloor
  8815.  bra gouraudfloorDOUB
  8816.  
  8817. .nodoub:
  8818.  
  8819.  move.w d6,a2
  8820.  moveq #0,d0 
  8821.  move.w rightedge(pc),d3 
  8822.  lea (a3,a2.w),a3 
  8823.  move.w d3,d7
  8824.  sub.w a2,d7
  8825.  
  8826. intofirststrip:
  8827. allintofirst:
  8828.  
  8829.  move.w startsmoothx,d3
  8830.  
  8831. tstwat:
  8832.  
  8833.  tst.b usewater
  8834.  bne texturedwater
  8835. ; tst.b gourfloor
  8836.  bra gouraudfloor
  8837.  
  8838.  
  8839.  
  8840. ******************************
  8841. * BumpMap the floor/ceiling! *
  8842.  tst.b usebumps
  8843.  bne.s BumpMap
  8844. ******************************
  8845.  
  8846. ordinary:
  8847.  moveq #0,d0
  8848.  
  8849.  dbra d7,acrossscrn
  8850.  rts
  8851.  
  8852. usebumps: dc.w $0
  8853. smoothbumps: dc.w $0
  8854. gourfloor: dc.w 0
  8855.  
  8856.  include "ab3:source_4000/bumpmap.s"
  8857.  
  8858.  CNOP 0,4
  8859. backbefore:
  8860.  and.w d1,d5
  8861.  move.b (a0,d5.w*4),d0
  8862.  add.w a4,d3
  8863.  addx.l d6,d5
  8864.  move.w (a1,d0.w*2),(a3)
  8865.  addq #4,a3
  8866.  dbcs d7,acrossscrn
  8867.  dbcc d7,backbefore
  8868.  bra.s past1
  8869.  
  8870. acrossscrn:
  8871.  and.w d1,d5
  8872.  move.b (a0,d5.w*4),d0
  8873.  add.w a4,d3
  8874.  addx.l d2,d5
  8875.  move.w (a1,d0.w*2),(a3)
  8876.  addq #4,a3
  8877.  dbcs d7,acrossscrn
  8878.  dbcc d7,backbefore
  8879. past1:
  8880.  bcc.s gotoacross
  8881.  
  8882.  move.w d4,d7
  8883.  bne.s .notdoneyet
  8884.  rts
  8885. .notdoneyet:
  8886.  
  8887.  cmp.w #32,d7
  8888.  ble.s .notoowide
  8889.  move.w #32,d7
  8890. .notoowide
  8891.  sub.w d7,d4  
  8892.  addq #4,a3
  8893.  
  8894.  dbra d7,backbefore
  8895.  rts
  8896.  
  8897.  
  8898. gotoacross:
  8899.  
  8900.  move.w d4,d7
  8901.  bne.s .notdoneyet
  8902.  rts
  8903. .notdoneyet:
  8904.  
  8905.  cmp.w #32,d7
  8906.  ble.s .notoowide
  8907.  move.w #32,d7
  8908. .notoowide
  8909.  sub.w d7,d4  
  8910.  addq #4,a3
  8911.  
  8912.  dbra d7,acrossscrn
  8913.  rts
  8914.  
  8915. leftbright: dc.l 0
  8916. brightspd: dc.l 0
  8917.  
  8918. gouraudfloor:
  8919.  
  8920.  move.w leftbright,d0
  8921.  move.l d1,d4
  8922.  move.w brightspd,d1
  8923.  
  8924.  move.w d7,d3
  8925.  asr.w #1,d7
  8926.  btst #0,d3
  8927.  beq.s .nosingle1
  8928.  move.w d5,d3
  8929.  move.l d5,d6
  8930.  lsr.w #8,d3
  8931.  swap d6
  8932.  move.b d3,d6
  8933.  move.w d0,d3
  8934.  move.b (a0,d6.w*4),d3
  8935.  add.w d1,d0
  8936.  add.l d2,d5
  8937.  and.l d4,d5
  8938.  move.b (a1,d3.w*2),(a3)+
  8939. .nosingle1
  8940.  
  8941.  move.w d7,d3
  8942.  asr.w #1,d7
  8943.  btst #0,d3
  8944.  beq.s .nosingle2
  8945.  move.w d5,d3
  8946.  move.l d5,d6
  8947.  lsr.w #8,d3
  8948.  swap d6
  8949.  move.b d3,d6
  8950.  move.w d0,d3
  8951.  move.b (a0,d6.w*4),d3
  8952.  add.w d1,d0
  8953.  add.l d2,d5
  8954.  and.l d4,d5
  8955.  move.l d5,d6
  8956.  swap d6
  8957.  move.b (a1,d3.w*2),(a3)+
  8958.  move.w d5,d3
  8959.  lsr.w #8,d3
  8960.  move.b d3,d6
  8961.  move.w d0,d3
  8962.  move.b (a0,d6.w*4),d3
  8963.  add.w d1,d0
  8964.  add.l d2,d5
  8965.  and.l d4,d5
  8966.  move.b (a1,d3.w*2),(a3)+
  8967.  
  8968. .nosingle2
  8969.  
  8970.  move.l d5,d6
  8971.  swap d6
  8972.  
  8973.  dbra d7,acrossscrngour
  8974.  rts
  8975.  
  8976.  CNOP 0,4
  8977.  
  8978. acrossscrngour:
  8979.  move.w d5,d3
  8980.  lsr.w #8,d3
  8981.  move.b d3,d6
  8982.  move.w d0,d3
  8983.  move.b (a0,d6.w*4),d3
  8984.  add.w d1,d0
  8985.  add.l d2,d5
  8986.  and.l d4,d5
  8987.  move.l d5,d6
  8988.  swap d6
  8989.  move.b (a1,d3.w*2),(a3)+
  8990.  move.w d5,d3
  8991.  lsr.w #8,d3
  8992.  move.b d3,d6
  8993.  move.w d0,d3
  8994.  move.b (a0,d6.w*4),d3
  8995.  add.w d1,d0
  8996.  add.l d2,d5
  8997.  and.l d4,d5
  8998.  move.l d5,d6
  8999.  swap d6
  9000.  move.b (a1,d3.w*2),(a3)+
  9001.  move.w d5,d3
  9002.  lsr.w #8,d3
  9003.  move.b d3,d6
  9004.  move.w d0,d3
  9005.  move.b (a0,d6.w*4),d3
  9006.  add.w d1,d0
  9007.  add.l d2,d5
  9008.  and.l d4,d5
  9009.  move.l d5,d6
  9010.  swap d6
  9011.  move.b (a1,d3.w*2),(a3)+
  9012.  move.w d5,d3
  9013.  lsr.w #8,d3
  9014.  move.b d3,d6
  9015.  move.w d0,d3
  9016.  move.b (a0,d6.w*4),d3
  9017.  add.w d1,d0
  9018.  add.l d2,d5
  9019.  and.l d4,d5
  9020.  move.l d5,d6
  9021.  swap d6
  9022.  move.b (a1,d3.w*2),(a3)+
  9023.  dbra d7,acrossscrngour
  9024.  
  9025.  rts
  9026.  
  9027.  
  9028. gouraudfloorDOUB:
  9029.  
  9030.  move.w leftbright,d0
  9031.  move.l d1,d4
  9032.  move.w brightspd,d1
  9033.  add.w d1,d1
  9034.  add.l d2,d2
  9035.  
  9036.  move.w d7,d3
  9037.  asr.w #1,d7
  9038.  btst #0,d3
  9039.  beq.s .nosingle1
  9040.  move.w d5,d3
  9041.  move.l d5,d6
  9042.  lsr.w #8,d3
  9043.  swap d6
  9044.  move.b d3,d6
  9045.  move.w d0,d3
  9046.  move.b (a0,d6.w*4),d3
  9047.  add.w d1,d0
  9048.  add.l d2,d5
  9049.  and.l d4,d5
  9050.  move.w (a1,d3.w*2),(a3)+
  9051. .nosingle1
  9052.  
  9053.  move.w d7,d3
  9054.  asr.w #1,d7
  9055.  btst #0,d3
  9056.  beq.s .nosingle2
  9057.  move.w d5,d3
  9058.  move.l d5,d6
  9059.  lsr.w #8,d3
  9060.  swap d6
  9061.  move.b d3,d6
  9062.  move.w d0,d3
  9063.  move.b (a0,d6.w*4),d3
  9064.  add.w d1,d0
  9065.  add.l d2,d5
  9066.  and.l d4,d5
  9067.  move.l d5,d6
  9068.  swap d6
  9069.  move.w (a1,d3.w*2),(a3)+
  9070.  move.w d5,d3
  9071.  lsr.w #8,d3
  9072.  move.b d3,d6
  9073.  move.w d0,d3
  9074.  move.b (a0,d6.w*4),d3
  9075.  add.w d1,d0
  9076.  add.l d2,d5
  9077.  and.l d4,d5
  9078.  move.w (a1,d3.w*2),(a3)+
  9079.  
  9080. .nosingle2
  9081.  
  9082.  move.l d5,d6
  9083.  swap d6
  9084.  
  9085.  dbra d7,acrossscrngourD
  9086.  rts
  9087.  
  9088.  CNOP 0,4
  9089.  
  9090. acrossscrngourD:
  9091.  move.w d5,d3
  9092.  lsr.w #8,d3
  9093.  move.b d3,d6
  9094.  move.w d0,d3
  9095.  move.b (a0,d6.w*4),d3
  9096.  add.w d1,d0
  9097.  add.l d2,d5
  9098.  and.l d4,d5
  9099.  move.l d5,d6
  9100.  swap d6
  9101.  move.w (a1,d3.w*2),(a3)+
  9102.  move.w d5,d3
  9103.  lsr.w #8,d3
  9104.  move.b d3,d6
  9105.  move.w d0,d3
  9106.  move.b (a0,d6.w*4),d3
  9107.  add.w d1,d0
  9108.  add.l d2,d5
  9109.  and.l d4,d5
  9110.  move.l d5,d6
  9111.  swap d6
  9112.  move.w (a1,d3.w*2),(a3)+
  9113.  move.w d5,d3
  9114.  lsr.w #8,d3
  9115.  move.b d3,d6
  9116.  move.w d0,d3
  9117.  move.b (a0,d6.w*4),d3
  9118.  add.w d1,d0
  9119.  add.l d2,d5
  9120.  and.l d4,d5
  9121.  move.l d5,d6
  9122.  swap d6
  9123.  move.w (a1,d3.w*2),(a3)+
  9124.  move.w d5,d3
  9125.  lsr.w #8,d3
  9126.  move.b d3,d6
  9127.  move.w d0,d3
  9128.  move.b (a0,d6.w*4),d3
  9129.  add.w d1,d0
  9130.  add.l d2,d5
  9131.  and.l d4,d5
  9132.  move.l d5,d6
  9133.  swap d6
  9134.  move.w (a1,d3.w*2),(a3)+
  9135.  dbra d7,acrossscrngourD
  9136.  
  9137.  rts
  9138.  
  9139.  
  9140. ;backbeforegour:
  9141. ; and.w #63*256+63,d5
  9142. ; move.b (a0,d5.w*4),d0
  9143. ; add.l d1,d0
  9144. ; bcc.s .nomoreb
  9145. ; add.w #256,d0
  9146. ;.nomoreb:
  9147. ; add.w a4,d3
  9148. ; move.w (a1,d0.w*2),(a3)+
  9149. ; addx.l d6,d5
  9150. ; dbcs d7,acrossscrngour
  9151. ; dbcc d7,backbeforegour
  9152. ; rts
  9153. ; bra.s past1gour
  9154.  
  9155. ;acrossscrngour:
  9156. ; and.l #$3f3f,d5 
  9157. ; move.b (a0,d5.w*4),d0
  9158. ; add.l d1,d0
  9159. ; bcc.s .nomoreb
  9160. ; add.w #256,d0
  9161. ;.nomoreb:
  9162. ; add.w a4,d3
  9163. ; move.w (a1,d0.w*2),(a3)+
  9164. ; addx.l d2,d5
  9165. ; dbcs d7,acrossscrngour
  9166. ; dbcc d7,backbeforegour
  9167. ;past1gour:
  9168. ; rts
  9169.  
  9170.  move.w d4,d7
  9171.  bne.s .notdoneyet
  9172.  move.l d0,leftbright
  9173.  
  9174.  rts
  9175. .notdoneyet:
  9176.  
  9177.  cmp.w #32,d7
  9178.  ble.s .notoowide
  9179.  move.w #32,d7
  9180. .notoowide
  9181.  sub.w d7,d4  
  9182.  addq #4,a3
  9183.  
  9184. ; dbra d7,backbeforegour
  9185.  rts
  9186.  
  9187.  
  9188. gotoacrossgour:
  9189.  
  9190.  move.w d4,d7
  9191.  bne.s .notdoneyet
  9192.  rts
  9193. .notdoneyet:
  9194.  
  9195.  cmp.w #32,d7
  9196.  ble.s .notoowide
  9197.  move.w #32,d7
  9198. .notoowide
  9199.  sub.w d7,d4  
  9200.  addq #4,a3
  9201.  
  9202.  dbra d7,acrossscrngour
  9203.  rts
  9204.  
  9205.  
  9206. waterpt: dc.l waterlist
  9207.  
  9208. waterlist:
  9209.  dc.l waterfile
  9210.  dc.l waterfile+2
  9211.  dc.l waterfile+256
  9212.  dc.l waterfile+256+2
  9213.  dc.l waterfile+512
  9214.  dc.l waterfile+512+2
  9215.  dc.l waterfile+768
  9216.  dc.l waterfile+768+2
  9217. ; dc.l waterfile+768
  9218. ; dc.l waterfile+512+2
  9219. ; dc.l waterfile+512
  9220. ; dc.l waterfile+256+2
  9221. ; dc.l waterfile+256
  9222. ; dc.l waterfile+2
  9223. endwaterlist:
  9224.  
  9225. watertouse: dc.l waterfile
  9226.  
  9227. wtan: dc.w 0
  9228. wateroff: dc.l 0
  9229.  
  9230. REFLECTIONWATER:
  9231.  
  9232.  move.l d1,d4
  9233.  
  9234.  add.l wateroff,d5
  9235.  
  9236.  move.l #brightentab,a1
  9237.  move.w dst,d0
  9238.  clr.b d0
  9239.  
  9240.  add.w d0,d0
  9241.  cmp.w #12*512,d0
  9242.  blt.s .notoowater
  9243.  move.w #12*512,d0
  9244.  
  9245. .notoowater:
  9246.   
  9247.  adda.w d0,a1
  9248.  
  9249.  move.w dst,d0
  9250.  asl.w #7,d0
  9251.  add.w wtan,d0
  9252.  and.w #8191,d0
  9253.  move.l #SineTable,a0
  9254.  move.w (a0,d0.w),d0
  9255.  ext.l d0
  9256.  
  9257.  move.w dst,d3
  9258.  add.w #300,d3
  9259.  divs d3,d0
  9260.  asr.w #5,d0
  9261.  addq #4,d0
  9262.  cmp.w disttobot,d0
  9263.  blt.s oknotoffbotototr
  9264.  
  9265.  move.w disttobot,d0
  9266.  subq #1,d0
  9267.  
  9268. oknotoffbotototr
  9269.  
  9270. ; move.w dst,d3
  9271. ; asr.w #7,d3
  9272. ; add.w d3,d0
  9273.  
  9274.  muls #320,d0
  9275.  tst.w above
  9276.  beq.s nonnnnnegr
  9277.  neg.l d0
  9278.  
  9279. nonnnnnegr:
  9280.  
  9281.  move.l d0,a6
  9282.  
  9283.  move.l watertouse,a0
  9284.  
  9285. ; move.l #mixtab,a5
  9286.  
  9287.  moveq #0,d1
  9288.  
  9289.  move.w startsmoothx,d3
  9290.  dbra d7,acrossscrnwr
  9291.  rts
  9292.  
  9293. backbeforewr:
  9294.  and.w d1,d5 
  9295.  move.w (a0,d5.w*4),d0
  9296.  move.b (a3,a6.w),d0
  9297.  move.w (a1,d0.w*2),(a3)+
  9298.  add.w a4,d3
  9299.  addx.l d6,d5
  9300.  dbcs d7,acrossscrnwr
  9301.  dbcc d7,backbeforewr
  9302.  rts
  9303.  
  9304. acrossscrnwr:
  9305.  move.w d5,d3
  9306.  move.l d5,d6
  9307.  lsr.w #8,d3
  9308.  swap d6
  9309.  move.b d3,d6
  9310.  move.w (a0,d6.w*4),d0
  9311.  add.l d2,d5
  9312.  move.w (a4,a6.w),d1
  9313.  addq #2,a4
  9314.  move.b (a3,a6.w),d1
  9315.  move.b (a5,d1.l),d0
  9316.  and.l d4,d5
  9317.  move.w (a1,d0.w*2),(a3)+
  9318.  dbra d7,acrossscrnwr
  9319.  rts
  9320.  
  9321. texturedwater:
  9322.  
  9323.  move.l d1,d4
  9324.  
  9325.  add.l wateroff,d5
  9326.  
  9327.  move.l #brightentab,a1
  9328.  move.w dst,d0
  9329.  clr.b d0
  9330.  
  9331.  add.w d0,d0
  9332.  cmp.w #11*512,d0
  9333.  blt.s .notoowater
  9334.  move.w #11*512,d0
  9335. .notoowater:
  9336.   
  9337.  adda.w d0,a1
  9338.  
  9339.  move.w dst,d0
  9340.  asl.w #7,d0
  9341.  add.w wtan,d0
  9342.  and.w #8191,d0
  9343.  move.l #SineTable,a0
  9344.  move.w (a0,d0.w),d0
  9345.  ext.l d0
  9346.  
  9347.  move.w dst,d3
  9348.  add.w #300,d3
  9349.  divs d3,d0
  9350.  asr.w #5,d0
  9351.  addq #4,d0
  9352.  cmp.w disttobot,d0
  9353.  blt.s oknotoffbototot
  9354.  
  9355.  move.w disttobot,d0
  9356.  subq #1,d0
  9357.  
  9358. oknotoffbototot
  9359.  
  9360. ; move.w dst,d3
  9361. ; asr.w #7,d3
  9362. ; add.w d3,d0
  9363.  
  9364.  tst.b DOUBLEHEIGHT
  9365.  beq.s .nodoub
  9366.  and.b #$fe,d0
  9367. .nodoub:
  9368.  
  9369.  muls #320,d0
  9370.  tst.w above
  9371.  beq.s nonnnnneg
  9372.  neg.l d0
  9373.  
  9374. nonnnnneg:
  9375.  
  9376.  move.l d0,a6
  9377.  
  9378.  move.l watertouse,a0
  9379.  
  9380.  move.w startsmoothx,d3
  9381.  dbra d7,acrossscrnw
  9382.  rts
  9383.  
  9384. backbeforew:
  9385.  and.w d1,d5
  9386.  move.w (a0,d5.w*4),d0
  9387.  move.b (a3,a6.w),d0
  9388.  move.b (a1,d0.w*2),(a3)+
  9389.  add.w a4,d3
  9390.  addx.l d6,d5
  9391.  dbcs d7,acrossscrnw
  9392.  dbcc d7,backbeforew
  9393.  rts
  9394.  
  9395. acrossscrnw:
  9396.  move.w d5,d3
  9397.  move.l d5,d6
  9398.  lsr.w #8,d3
  9399.  swap d6
  9400.  move.b d3,d6
  9401.  move.w (a0,d6.w*4),d0
  9402.  add.l d2,d5
  9403.  move.b (a3,a6.w),d0
  9404.  and.l d4,d5
  9405.  move.b (a1,d0.w*2),(a3)+
  9406.  dbra d7,acrossscrnw
  9407.  rts
  9408.  
  9409.  
  9410. texturedwaterDOUB:
  9411.  
  9412.  move.l d1,d4
  9413.  
  9414.  add.l wateroff,d5
  9415.  
  9416.  move.l #brightentab,a1
  9417.  move.w dst,d0
  9418.  clr.b d0
  9419.  
  9420.  add.w d0,d0
  9421.  cmp.w #11*512,d0
  9422.  blt.s .notoowater
  9423.  move.w #11*512,d0
  9424. .notoowater:
  9425.   
  9426.  adda.w d0,a1
  9427.  
  9428.  move.w dst,d0
  9429.  asl.w #7,d0
  9430.  add.w wtan,d0
  9431.  and.w #8191,d0
  9432.  move.l #SineTable,a0
  9433.  move.w (a0,d0.w),d0
  9434.  ext.l d0
  9435.  
  9436.  move.w dst,d3
  9437.  add.w #300,d3
  9438.  divs d3,d0
  9439.  asr.w #5,d0
  9440.  addq #4,d0
  9441.  cmp.w disttobot,d0
  9442.  blt.s .oknotoffbototot
  9443.  
  9444.  move.w disttobot,d0
  9445.  subq #1,d0
  9446.  
  9447. .oknotoffbototot
  9448.  
  9449. ; move.w dst,d3
  9450. ; asr.w #7,d3
  9451. ; add.w d3,d0
  9452.  
  9453.  tst.b DOUBLEHEIGHT
  9454.  beq.s .nodoub
  9455.  and.b #$fe,d0
  9456. .nodoub:
  9457.  
  9458.  muls #320,d0
  9459.  tst.w above
  9460.  beq.s .nonnnnneg
  9461.  neg.l d0
  9462.  
  9463. .nonnnnneg:
  9464.  
  9465.  move.l d0,a6
  9466.  
  9467.  move.l watertouse,a0
  9468.  
  9469.  add.l d2,d2
  9470.  
  9471.  move.w startsmoothx,d3
  9472.  dbra d7,acrossscrnwD
  9473.  rts
  9474.  
  9475.  
  9476. acrossscrnwD:
  9477.  move.w d5,d3
  9478.  move.l d5,d6
  9479.  lsr.w #8,d3
  9480.  swap d6
  9481.  move.b d3,d6
  9482.  move.w (a0,d6.w*4),d0
  9483.  add.l d2,d5
  9484.  move.b (a3,a6.w),d0
  9485.  and.l d4,d5
  9486.  move.w (a1,d0.w*2),(a3)+
  9487.  dbra d7,acrossscrnwD
  9488.  rts
  9489.  
  9490.  
  9491. usewater: dc.w 0
  9492.  dc.w 0
  9493. startsmoothx: dc.w 0
  9494.  dc.w 0
  9495. startsmoothz: dc.w 0
  9496.  
  9497. ********************************
  9498. *
  9499.  include "AB3:source_4000/ObjDrawHIRES.s"
  9500. *
  9501. ********************************
  9502.  
  9503. numframes:
  9504.  dc.w 0
  9505.  
  9506. alframe: dc.l 0
  9507.  
  9508. alan:
  9509.  dcb.l 8,0
  9510.  dcb.l 8,1
  9511.  dcb.l 8,2
  9512.  dcb.l 8,3
  9513. endalan:
  9514.  
  9515. alanptr: dc.l alan
  9516.  
  9517. Time2: dc.l 0
  9518. dispco:
  9519.  dc.w 0
  9520.  
  9521.  
  9522. key_interrupt:
  9523.         movem.l    d0-d7/a0-a6,-(sp)
  9524.  
  9525. ;        move.w    INTREQR,d0
  9526. ;        btst    #3,d0
  9527. ;        beq    .not_key
  9528.  
  9529.         move.b    $bfdd00,d0
  9530.         btst    #0,d0
  9531.         bne    .key_cont
  9532. ;        move.b    $bfed01,d0
  9533. ;        btst    #0,d0
  9534. ;        bne    .key_cont
  9535.     
  9536. ;        btst    #3,d0
  9537. ;        beq    .key_cont
  9538.  
  9539.         move.b    $bfec01,d0
  9540.         clr.b    $bfec01
  9541.  
  9542.         tst.b    d0
  9543.         beq    .key_cont
  9544.  
  9545. ;        bset    #6,$bfee01
  9546. ;        move.b    #$f0,$bfe401
  9547. ;        move.b    #$00,$bfe501
  9548. ;        bset    #0,$bfee01
  9549.  
  9550.  
  9551.         not.b    d0
  9552.         ror.b    #1,d0
  9553.         lea.l    KeyMap,a0
  9554.         tst.b    d0
  9555.         bmi.b    .key_up
  9556.         and.w    #$7f,d0
  9557. ;        add.w    #1,d0
  9558.         move.b    #$ff,(a0,d0.w)
  9559.         move.b    d0,lastpressed
  9560.  
  9561.         bra.b    .key_cont2
  9562. .key_up:
  9563.         and.w    #$7f,d0
  9564. ;        add.w    #1,d0
  9565.         move.b    #$00,(a0,d0.w)
  9566.  
  9567. .key_cont2
  9568. ;        btst    #0,$bfed01
  9569. ;        beq    .key_cont2
  9570. ;        move.b    #%00000000,$bfee01
  9571. ;        move.b    #%10001000,$bfed01
  9572.  
  9573. ;alt keys should not be independent so overlay ralt on lalt
  9574.  
  9575.         
  9576. .key_cont
  9577.  
  9578. ;        move.w    #$0008,INTREQ
  9579. .not_key:    ;lea.l    $dff000,a5
  9580.  
  9581. ;        lea.l    _keypressed(pc),a0
  9582. ;        move.b    101(a0),d0    ;read LALT
  9583. ;        or.b    102(a0),d0    ;blend it with RALT
  9584. ;        move.b    d0,127(a0)    ;save in combined position
  9585.  
  9586.         movem.l    (sp)+,d0-d7/a0-a6
  9587.  
  9588.         rts
  9589.  
  9590. lastpressed:    dc.b 0
  9591. KInt_CCode    Ds.b    1
  9592. KInt_Askey    Ds.b    1
  9593. KInt_OCode    Ds.w    1
  9594.  
  9595.  
  9596. OldSpace: dc.b 0
  9597. SpaceTapped: dc.b 0
  9598. PLR1_SPCTAP: dc.b 0
  9599. PLR2_SPCTAP: dc.b 0
  9600. PLR1_Ducked: dc.b 0
  9601. PLR2_Ducked: dc.b 0
  9602.  even
  9603.  
  9604.  include "ab3:source_4000/PLR1CONTROL.s"
  9605.  include "ab3:source_4000/PLR2CONTROL.s"
  9606.  include "ab3:source_4000/FALL.s"
  9607.  
  9608. prot7: dc.w 0
  9609.  
  9610. GOTTOSEND: dc.w 0
  9611.  
  9612. OtherInter:
  9613.  move.w #$0010,$dff000+intreq
  9614.  movem.l d0-d7/a0-a6,-(a7)
  9615.  bra justshake
  9616.  
  9617.     cnop 0,4
  9618.  
  9619. Chan0inter:
  9620.  
  9621.     SAVEREGS
  9622.     jsr    .routine
  9623.     GETREGS
  9624.  
  9625. ;    move.w    #1024+'.',$dff030
  9626.     
  9627.     moveq #1,d0
  9628.     rts
  9629.  
  9630. .routine
  9631.  
  9632.     
  9633. ;w move.w #$0010,$dff000+intreq
  9634.  
  9635.  tst.b doanything
  9636.  bne dosomething
  9637.  
  9638.  movem.l d0-d7/a0-a6,-(a7)
  9639.  bra JUSTSOUNDS
  9640.  
  9641.  rts
  9642.  
  9643. tabheld: dc.w 0
  9644. ObjWork: ds.l 512
  9645. WORKPTR: dc.l 0
  9646. thistime: dc.w 0
  9647.  
  9648. DOALLANIMS:
  9649.  
  9650.  sub.b #1,thistime
  9651.  ble.s .okdosome
  9652.  rts
  9653.  
  9654. .okdosome:
  9655.  move.b #5,thistime
  9656.  
  9657.  
  9658.  move.l #ObjWork,a5
  9659.  move.l ObjectData,a0
  9660. Objectloop2:
  9661.  tst.w (a0)
  9662.  blt doneallobj2
  9663.  move.w 12(a0),d0
  9664.  blt doneobj2
  9665.  move.w d0,GraphicRoom(a0)
  9666.  tst.b worry(a0)
  9667.  beq.s doneobj2
  9668.  
  9669.  move.b 16(a0),d0
  9670.  cmp.b #1,d0
  9671.  blt JUMPALIENANIM
  9672.  beq JUMPOBJECTANIM
  9673. ; cmp.b #2,d0
  9674. ; beq JUMPBULLET
  9675.  
  9676. doneobj2:
  9677.  
  9678.  adda.w #64,a0
  9679.  addq #8,a5
  9680.  bra Objectloop2
  9681.  
  9682. doneallobj2:
  9683.  rts
  9684.  
  9685. JUMPALIENANIM:
  9686.  
  9687.  moveq #0,d0
  9688.  move.b WhichAnim(a0),d0
  9689. ; 0=walking
  9690. ; 1=attacking
  9691. ; 2=getting hit
  9692. ; 3=dying
  9693.  
  9694.  cmp.b #1,d0
  9695.  blt.s ALWALK
  9696.  beq.s ALATTACK
  9697.  
  9698.  cmp.b #3,d0
  9699.  blt ALGETHIT
  9700.  beq ALDIE
  9701.  
  9702.  bra doneobj2
  9703.  
  9704. ALDIE
  9705.  move.l #10,d0
  9706.  bra intowalk
  9707.  
  9708. ALGETHIT:
  9709.  move.l #9,d0
  9710.  bra intowalk
  9711.  
  9712. ALATTACK:
  9713.  move.l #8,d0
  9714.  bra intowalk
  9715.  
  9716. AUXOBJ: dc.w 0
  9717.  
  9718. ALWALK:
  9719.  
  9720.  jsr ViewpointToDraw
  9721.  add.l d0,d0
  9722.  
  9723. ; cmp.b #1,VECOBJ
  9724. ; bne.s NOSIDES2
  9725. ; moveq #0,d0
  9726. intowalk:
  9727.  
  9728. NOSIDES2:
  9729.  
  9730.  move.b d0,2(a5)
  9731.  move.l LINKFILE,a6
  9732.  
  9733.  add.l #AlienAnimData,a6
  9734.  
  9735.  moveq #0,d1
  9736.  move.b TypeOfThing(a0),d1
  9737.  muls #A_AnimLen,d1
  9738.  add.l d1,a6
  9739.  
  9740. ; move.l ANIMPOINTER,a6
  9741.  
  9742.  muls #A_OptLen,d0
  9743.  add.w d0,a6
  9744.  
  9745.  move.w SecTimer(a0),d1
  9746.  move.w d1,d2
  9747.  muls #A_FrameLen,d1
  9748.  
  9749.  moveq #0,d0
  9750.  move.b 5(a6,d1.w),d0
  9751.  beq.s .nosoundmake
  9752.  
  9753.  movem.l d0-d7/a0-a6,-(a7)
  9754.  subq #1,d0
  9755.  move.w d0,Samplenum
  9756.  clr.b notifplaying
  9757.  move.b 1(a0),IDNUM
  9758.  move.w #80,Noisevol
  9759.  move.l #ObjRotated,a1
  9760.  move.w (a0),d0
  9761.  lea (a1,d0.w*8),a1
  9762.  move.l (a1),Noisex
  9763.  jsr MakeSomeNoise
  9764.  movem.l (a7)+,d0-d7/a0-a6
  9765. .nosoundmake
  9766.  
  9767.  move.b 6(a6,d1.w),d0
  9768.  beq.s .noaction
  9769.  add.b #1,(a5)
  9770.  move.b d2,1(a5)
  9771. .noaction
  9772.  
  9773.  addq #1,d2
  9774.  
  9775.  moveq #0,d0
  9776.  move.b 7(a6,d1.w),d0
  9777.  beq.s .nospecial
  9778.  
  9779.  move.b d0,d3
  9780.  and.w #63,d3
  9781.  lsr.w #6,d0
  9782.  cmp.w #2,d0
  9783.  blt.s .storeval
  9784.  beq.s .randval
  9785.  
  9786.  sub.b #1,4(a5)
  9787.  beq.s .nospecial
  9788.  
  9789.  move.w d3,d2
  9790.  bra.s .nospecial
  9791.  
  9792. .randval:
  9793.  jsr GetRand
  9794.  divs d3,d0
  9795.  swap d0
  9796.  move.w d0,d3
  9797.  
  9798. .storeval:
  9799.  move.b d3,4(a5)
  9800. .nospecial:
  9801.  
  9802.  move.w d2,d3
  9803.  muls #A_FrameLen,d3
  9804.  tst.b (a6,d3.w)
  9805.  bge.s .noendanim
  9806.  st 3(a5)
  9807.  move.w #0,d2
  9808. .noendanim
  9809.  move.w d2,SecTimer(a0)
  9810.  
  9811.  bra doneobj2
  9812.  
  9813.  
  9814. JUMPOBJECTANIM:
  9815.  bra doneobj2
  9816.  
  9817.  
  9818. dosomething:
  9819.  
  9820.  
  9821.  addq.w #1,FramesToDraw
  9822.  movem.l d0-d7/a0-a6,-(a7)
  9823.  
  9824.  bsr DOALLANIMS
  9825.  
  9826.  move.l #KeyMap,a5
  9827.  
  9828.  tst.b $42(a5)
  9829.  bne.s .tabprsd
  9830.  clr.b tabheld
  9831.  bra.s .noswitch
  9832.  
  9833. .tabprsd:
  9834.  tst.b tabheld
  9835.  bne.s .noswitch
  9836.  not.b MAPON
  9837.  st tabheld
  9838. .noswitch
  9839.  
  9840.  tst.b $3e(a5)
  9841.  sne d0
  9842.  tst.b $1e(a5)
  9843.  sne d1
  9844.  tst.b $2d(a5)
  9845.  sne d2
  9846.  tst.b $2f(a5)
  9847.  sne d3
  9848.  
  9849.  tst.b $3d(a5)
  9850.  sne d4
  9851.  tst.b $3f(a5)
  9852.  sne d5
  9853.  tst.b $1d(a5)
  9854.  sne d6
  9855.  tst.b $1f(a5)
  9856.  sne d7
  9857.  
  9858.  or.b d4,d0
  9859.  or.b d5,d0
  9860.  or.b d6,d1
  9861.  or.b d7,d1
  9862.  or.b d4,d2
  9863.  or.b d6,d2
  9864.  or.b d7,d3
  9865.  or.b d5,d3
  9866.  
  9867.  move.w MAPBRIGHT,d4
  9868.  add.w #2,d4
  9869.  clr.l d5
  9870.  bset d4,d5
  9871.  
  9872.  tst.b d0
  9873.  beq.s .nomapup
  9874.  sub.w d5,mapzoff
  9875. .nomapup 
  9876.  
  9877.  tst.b d1
  9878.  beq.s .nomapdown
  9879.  add.w d5,mapzoff
  9880. .nomapdown 
  9881.  
  9882.  tst.b d2
  9883.  beq.s .nomapleft
  9884.  add.w d5,mapxoff
  9885. .nomapleft 
  9886.  
  9887.  tst.b d3
  9888.  beq.s .nomapright
  9889.  sub.w d5,mapxoff
  9890. .nomapright 
  9891.  
  9892.  tst.b $2e(a5)
  9893.  beq.s .nomapcentre
  9894.  
  9895.  move.w #0,mapxoff
  9896.  move.w #0,mapzoff
  9897.  
  9898. .nomapcentre
  9899.  
  9900. ; move.w STOPOFFSET,d0
  9901. ; tst.b 27(a5)
  9902. ; beq.s .nolookup
  9903. ; sub.w #5,d0
  9904. ; cmp.w #-80,d0
  9905. ; bgt.s .nolookup
  9906. ; move.w #-80,d0
  9907. ;.nolookup:
  9908. ; tst.b 42(a5)
  9909. ; beq.s .nolookdown
  9910. ; add.w #5,d0
  9911. ; cmp.w #80,d0
  9912. ; blt.s .nolookdown
  9913. ; move.w #80,d0
  9914. ;.nolookdown:
  9915. ;
  9916. ; move.w d0,STOPOFFSET
  9917. ; neg.w d0
  9918. ; add.w #120,d0
  9919. ; move.w d0,SMIDDLEY
  9920. ; muls #320*2,d0
  9921. ; move.l d0,SBIGMIDDLEY
  9922.  
  9923.  move.w STOPOFFSET,d0
  9924.  tst.b 27(a5)
  9925.  beq.s .nolookup
  9926.  
  9927.  sub.w #512,AIMSPD
  9928.  sub.w #4,d0
  9929.  cmp.w #-80,d0
  9930.  bgt.s .nolookup
  9931.  move.w #-512*20,AIMSPD
  9932.  move.w #-80,d0
  9933. .nolookup:
  9934.  tst.b 42(a5)
  9935.  beq.s .nolookdown
  9936.  add.w #512,AIMSPD
  9937.  add.w #4,d0
  9938.  cmp.w #80,d0
  9939.  blt.s .nolookdown
  9940.  move.w #512*20,AIMSPD
  9941.  move.w #80,d0
  9942. .nolookdown:
  9943.  
  9944.  
  9945.  move.w d0,STOPOFFSET
  9946.  neg.w d0
  9947.  add.w TOTHEMIDDLE,d0
  9948.  move.w d0,SMIDDLEY
  9949.  muls #320,d0
  9950.  move.l d0,SBIGMIDDLEY
  9951.  
  9952.  
  9953. ; jsr INITREC
  9954. ; jsr RECEIVE
  9955.  
  9956. ; tst.l BUFFER
  9957. ; beq.s justshake
  9958. ; st GOTTOSEND
  9959. ; move.l #OtherInter,$6c
  9960.  
  9961. justshake:
  9962.  
  9963.  cmp.b #'b',Prefsfile+3
  9964.  bne.s .noback
  9965.  jsr mt_music
  9966. .noback:
  9967.  
  9968.  bra dontshowtime
  9969.  
  9970.  tst.b oktodisplay
  9971.  beq dontshowtime
  9972.  clr.b oktodisplay
  9973.  subq.w #1,dispco
  9974.  bgt dontshowtime
  9975.  move.w #10,dispco
  9976.  
  9977.  move.l #TimerScr+10,a0
  9978.  move.l TimeCount,d0
  9979.  bge.s timenotneg
  9980.  move.l #1111*256,d0
  9981. timenotneg:
  9982.  asr.l #8,d0
  9983.  move.l #digits,a1
  9984.  move.w #7,d2
  9985. digitlop
  9986.  divs #10,d0
  9987.  swap d0
  9988.  lea (a1,d0.w*8),a2
  9989.  move.b (a2)+,(a0)
  9990.  move.b (a2)+,24(a0)
  9991.  move.b (a2)+,24*2(a0)
  9992.  move.b (a2)+,24*3(a0)
  9993.  move.b (a2)+,24*4(a0)
  9994.  move.b (a2)+,24*5(a0)
  9995.  move.b (a2)+,24*6(a0)
  9996.  move.b (a2)+,24*7(a0)
  9997.  subq #1,a0
  9998.  swap d0
  9999.  ext.l d0
  10000.  dbra d2,digitlop
  10001.  
  10002.  move.l #TimerScr+10+24*10,a0
  10003.  move.l NumTimes,d0
  10004.  move.l #digits,a1
  10005.  move.w #3,d2
  10006. digitlop2
  10007.  divs #10,d0
  10008.  swap d0
  10009.  lea (a1,d0.w*8),a2
  10010.  move.b (a2)+,(a0)
  10011.  move.b (a2)+,24(a0)
  10012.  move.b (a2)+,24*2(a0)
  10013.  move.b (a2)+,24*3(a0)
  10014.  move.b (a2)+,24*4(a0)
  10015.  move.b (a2)+,24*5(a0)
  10016.  move.b (a2)+,24*6(a0)
  10017.  move.b (a2)+,24*7(a0)
  10018.  subq #1,a0
  10019.  swap d0
  10020.  ext.l d0
  10021.  dbra d2,digitlop2
  10022.  
  10023.  move.l #TimerScr+10+24*20,a0
  10024.  moveq #0,d0
  10025.  move.w FramesToDraw,d0
  10026.  move.l #digits,a1
  10027.  move.w #2,d2
  10028. digitlop3
  10029.  divs #10,d0
  10030.  swap d0
  10031.  lea (a1,d0.w*8),a2
  10032.  move.b (a2)+,(a0)
  10033.  move.b (a2)+,24(a0)
  10034.  move.b (a2)+,24*2(a0)
  10035.  move.b (a2)+,24*3(a0)
  10036.  move.b (a2)+,24*4(a0)
  10037.  move.b (a2)+,24*5(a0)
  10038.  move.b (a2)+,24*6(a0)
  10039.  move.b (a2)+,24*7(a0)
  10040.  subq #1,a0
  10041.  swap d0
  10042.  ext.l d0
  10043.  dbra d2,digitlop3
  10044.  
  10045. dontshowtime:
  10046.  
  10047.  
  10048.  move.l alanptr,a0
  10049.  move.l (a0)+,alframe
  10050.  cmp.l #endalan,a0
  10051.  blt.s nostartalan
  10052.  move.l #alan,a0
  10053. nostartalan:
  10054.  move.l a0,alanptr
  10055.  
  10056.  
  10057.  tst.b READCONTROLS
  10058.  beq.s nocontrols
  10059.  
  10060.  cmp.b #'s',mors
  10061.  beq.s control2
  10062.  
  10063.  tst.b PLR1MOUSE
  10064.  beq.s PLR1_nomouse
  10065.  bsr PLR1_mouse_control
  10066. PLR1_nomouse:
  10067.  tst.b PLR1KEYS
  10068.  beq.s PLR1_nokeys
  10069.  bsr PLR1_keyboard_control
  10070. PLR1_nokeys:
  10071. ; tst.b PLR1PATH
  10072. ; beq.s PLR1_nopath
  10073. ; bsr PLR1_follow_path
  10074. ;PLR1_nopath:
  10075.  tst.b PLR1JOY
  10076.  beq.s PLR1_nojoy
  10077.  bsr PLR1_JoyStick_control
  10078. PLR1_nojoy: 
  10079.  bra.s nocontrols
  10080.  
  10081. control2:
  10082.  tst.b PLR2MOUSE
  10083.  beq.s PLR2_nomouse
  10084.  bsr PLR2_mouse_control
  10085. PLR2_nomouse:
  10086.  tst.b PLR2KEYS
  10087.  beq.s PLR2_nokeys
  10088.  bsr PLR2_keyboard_control
  10089. PLR2_nokeys:
  10090. ; tst.b PLR2PATH
  10091. ; beq.s PLR2_nopath
  10092. ; bsr PLR1_follow_path
  10093. ;PLR2_nopath:
  10094.  tst.b PLR2JOY
  10095.  beq.s PLR2_nojoy
  10096.  bsr PLR2_JoyStick_control
  10097. PLR2_nojoy: 
  10098.  
  10099.  
  10100. nocontrols:
  10101.  
  10102.  move.l #$dff000,a6
  10103.  
  10104.  cmp.b #'4',Prefsfile+1
  10105.  bne.s nomuckabout
  10106.  
  10107.  move.w #$0,d0 
  10108.  tst.b NoiseMade0LEFT
  10109.  beq.s noturnoff0
  10110.  move.w #1,d0
  10111. noturnoff0:
  10112.  tst.b NoiseMade0RIGHT
  10113.  beq.s noturnoff1
  10114.  or.w #2,d0
  10115. noturnoff1:
  10116.  tst.b NoiseMade1RIGHT
  10117.  beq.s noturnoff2
  10118.  or.w #4,d0
  10119. noturnoff2:
  10120.  tst.b NoiseMade1LEFT
  10121.  beq.s noturnoff3
  10122.  or.w #8,d0
  10123. noturnoff3:
  10124.     move.w d0,dmacon(a6)
  10125.  
  10126. nomuckabout:
  10127.  
  10128.  
  10129. ; tst.b PLR2_fire
  10130. ; beq.s firenotpressed2
  10131. ; fire was pressed last time.
  10132. ; btst #7,$bfe001
  10133. ; bne.s firenownotpressed2
  10134. ; fire is still pressed this time.
  10135. ; st PLR2_fire
  10136. ; bra dointer
  10137.  
  10138. firenownotpressed2:
  10139. ; fire has been released.
  10140. ; clr.b PLR2_fire
  10141. ; bra dointer
  10142.  
  10143. firenotpressed2
  10144.  
  10145. ; fire was not pressed last frame...
  10146.  
  10147. ; btst #7,$bfe001
  10148. ; if it has still not been pressed, go back above
  10149. ; bne.s firenownotpressed2
  10150. ; fire was not pressed last time, and was this time, so has
  10151. ; been clicked.
  10152. ; st PLR2_clicked
  10153. ; st PLR2_fire
  10154.  
  10155. dointer
  10156.  
  10157. JUSTSOUNDS:
  10158.  
  10159.  tst.b dosounds
  10160.  beq.s .notthing
  10161.  
  10162.  cmp.b #'4',Prefsfile+1
  10163.     beq fourchannel
  10164.  
  10165.  btst #1,$dff000+intreqr
  10166.     bne.s newsampbitl
  10167.  
  10168. .notthing:
  10169.  
  10170.  movem.l (a7)+,d0-d7/a0-a6
  10171.  
  10172.  moveq #0,d0
  10173.  rts
  10174.  
  10175.  
  10176. dosounds: dc.w 0
  10177.  
  10178. swappedem: dc.w 0
  10179.  
  10180. newsampbitl:
  10181.  
  10182.  move.w #$820f,$dff000+dmacon
  10183.  
  10184.  move.w #$200,$dff000+intreq
  10185.  
  10186. ; tst.b CHANNELDATA
  10187. ; bne nochannel0
  10188.  
  10189.  move.l pos0LEFT,a0
  10190.  move.l pos2LEFT,a1
  10191.  
  10192.  move.l #tab,a2
  10193.  
  10194.  moveq #0,d0
  10195.  moveq #0,d1
  10196.  move.b vol0left,d0
  10197.  move.b vol2left,d1
  10198.  cmp.b d1,d0
  10199.  slt swappedem
  10200.  bge.s fbig0
  10201.  
  10202. ; d1 is bigger so scale d0 and use d1
  10203. ; as audiochannel volume.
  10204.  
  10205.  exg a0,a1
  10206.  asl.w #6,d0
  10207.  divs d1,d0
  10208.  lsl.w #8,d0
  10209.  adda.w d0,a2
  10210.  move.w d1,$dff0a8
  10211.  bra.s donechan0
  10212.  
  10213. fbig0:
  10214.  tst.w d0
  10215.  beq.s donechan0
  10216.  asl.w #6,d1
  10217.  divs d0,d1
  10218.  lsl.w #8,d1
  10219.  adda.w d1,a2
  10220.  move.w d0,$dff0a8
  10221.  
  10222. donechan0:
  10223.  
  10224.  move.l Aupt0,a3
  10225.  move.l a3,$dff0a0
  10226.  move.l Auback0,Aupt0
  10227.  move.l a3,Auback0
  10228.  
  10229.  move.l Auback0,a3
  10230.  
  10231.  moveq #0,d0
  10232.  moveq #0,d1
  10233.  moveq #0,d2
  10234.  moveq #0,d3
  10235.  moveq #0,d4
  10236.  moveq #0,d5
  10237.  move.w #49,d7
  10238. loop:
  10239.  move.l (a0)+,d0
  10240.  move.b (a1)+,d1
  10241.  move.b (a1)+,d2
  10242.  move.b (a1)+,d3
  10243.  move.b (a1)+,d4
  10244.  move.b (a2,d3.w),d5
  10245.  swap d5
  10246.  move.b (a2,d1.w),d5
  10247.  asl.l #8,d5
  10248.  move.b (a2,d2.w),d5
  10249.  swap d5
  10250.  move.b (a2,d4.w),d5
  10251.  add.l d5,d0
  10252.  move.l d0,(a3)+
  10253.  dbra d7,loop
  10254.  
  10255.  tst.b swappedem
  10256.  beq.s .ok23
  10257.  exg a0,a1
  10258. .ok23:
  10259.  
  10260.  cmp.l Samp0endLEFT,a0
  10261.  blt.s .notoffendsamp1
  10262.  move.l #empty,a0
  10263.  move.l #emptyend,Samp0endLEFT
  10264.  move.b #0,vol0left
  10265.  st LEFTCHANDATA+1
  10266.  move.w #0,LEFTCHANDATA+2
  10267. .notoffendsamp1:
  10268.  
  10269.  cmp.l Samp2endLEFT,a1
  10270.  blt.s .notoffendsamp2
  10271.  move.l #empty,a1
  10272.  move.l #emptyend,Samp2endLEFT
  10273.  move.b #0,vol2left
  10274.  st LEFTCHANDATA+1+8
  10275.  move.w #0,LEFTCHANDATA+2+8
  10276. .notoffendsamp2:
  10277.  
  10278.  move.l a0,pos0LEFT
  10279.  move.l a1,pos2LEFT
  10280.  
  10281. nochannel0:
  10282.  
  10283.  tst.b CHANNELDATA+16
  10284.  bne nochannel1
  10285.  
  10286.  
  10287.  move.l pos0RIGHT,a0
  10288.  move.l pos2RIGHT,a1
  10289.  
  10290.  move.l Aupt1,a3
  10291.  move.l a3,$dff0b0
  10292.  move.l Auback1,Aupt1
  10293.  move.l a3,Auback1
  10294.  
  10295.  move.l #tab,a2
  10296.  
  10297.  moveq #0,d0
  10298.  moveq #0,d1
  10299.  move.b vol0right,d0
  10300.  move.b vol2right,d1
  10301.  cmp.b d1,d0
  10302.  slt swappedem
  10303.  bge.s fbig1
  10304.  
  10305. ; d1 is bigger so scale d0 and use d1
  10306. ; as audiochannel volume.
  10307.  
  10308.  exg a0,a1
  10309.  asl.w #6,d0
  10310.  divs d1,d0
  10311.  lsl.w #8,d0
  10312.  adda.w d0,a2
  10313.  move.w d1,$dff0b8
  10314.  bra.s donechan1
  10315.  
  10316. fbig1:
  10317.  tst.w d0
  10318.  beq.s donechan1
  10319.  asl.w #6,d1
  10320.  divs d0,d1
  10321.  lsl.w #8,d1
  10322.  adda.w d1,a2
  10323.  move.w d0,$dff0b8
  10324.  
  10325. donechan1:
  10326.  moveq #0,d0
  10327.  moveq #0,d1
  10328.  moveq #0,d2
  10329.  moveq #0,d3
  10330.  moveq #0,d4
  10331.  moveq #0,d5
  10332.  move.w #49,d7
  10333. loop2:
  10334.  move.l (a0)+,d0
  10335.  move.b (a1)+,d1
  10336.  move.b (a1)+,d2
  10337.  move.b (a1)+,d3
  10338.  move.b (a1)+,d4
  10339.  move.b (a2,d3.w),d5
  10340.  swap d5
  10341.  move.b (a2,d1.w),d5
  10342.  asl.l #8,d5
  10343.  move.b (a2,d2.w),d5
  10344.  swap d5
  10345.  move.b (a2,d4.w),d5
  10346.  add.l d5,d0
  10347.  move.l d0,(a3)+
  10348.  dbra d7,loop2
  10349.  
  10350.  tst.b swappedem
  10351.  beq.s ok01
  10352.  exg a0,a1
  10353. ok01:
  10354.  
  10355.  cmp.l Samp0endRIGHT,a0
  10356.  blt.s .notoffendsamp1
  10357.  move.l #empty,a0
  10358.  move.l #emptyend,Samp0endRIGHT
  10359.  move.b #0,vol0right
  10360.  st RIGHTCHANDATA+1
  10361.  move.w #0,RIGHTCHANDATA+2
  10362. .notoffendsamp1:
  10363.  
  10364.  cmp.l Samp2endRIGHT,a1
  10365.  blt.s .notoffendsamp2
  10366.  move.l #empty,a1
  10367.  move.l #emptyend,Samp2endRIGHT
  10368.  move.b #0,vol2right
  10369.  st RIGHTCHANDATA+1+8
  10370.  move.w #0,RIGHTCHANDATA+2+8
  10371. .notoffendsamp2:
  10372.  
  10373.  move.l a0,pos0RIGHT
  10374.  move.l a1,pos2RIGHT
  10375.  
  10376. nochannel1:
  10377.  
  10378. ******************* Other two channels
  10379.  
  10380.  move.l pos1LEFT,a0
  10381.  move.l pos3LEFT,a1
  10382.  
  10383.  move.l #tab,a2
  10384.  
  10385.  moveq #0,d0
  10386.  moveq #0,d1
  10387.  move.b vol1left,d0
  10388.  move.b vol3left,d1
  10389.  cmp.b d1,d0
  10390.  slt swappedem
  10391.  bge.s fbig2
  10392.  
  10393. ; d1 is bigger so scale d0 and use d1
  10394. ; as audiochannel volume.
  10395.  
  10396.  exg a0,a1
  10397.  asl.w #6,d0
  10398.  divs d1,d0
  10399.  lsl.w #8,d0
  10400.  adda.w d0,a2
  10401.  move.w d1,$dff0d8
  10402.  bra.s donechan2
  10403.  
  10404. fbig2:
  10405.  tst.w d0
  10406.  beq.s donechan2
  10407.  asl.w #6,d1
  10408.  divs d0,d1
  10409.  lsl.w #8,d1
  10410.  adda.w d1,a2
  10411.  move.w d0,$dff0d8
  10412.  
  10413. donechan2:
  10414.  
  10415.  move.l Aupt2,a3
  10416.  move.l a3,$dff0d0
  10417.  move.l Auback2,Aupt2
  10418.  move.l a3,Auback2
  10419.  
  10420.  moveq #0,d0
  10421.  moveq #0,d1
  10422.  moveq #0,d2
  10423.  moveq #0,d3
  10424.  moveq #0,d4
  10425.  moveq #0,d5
  10426.  move.w #49,d7
  10427. loop3:
  10428.  move.l (a0)+,d0
  10429.  move.b (a1)+,d1
  10430.  move.b (a1)+,d2
  10431.  move.b (a1)+,d3
  10432.  move.b (a1)+,d4
  10433.  move.b (a2,d3.w),d5
  10434.  swap d5
  10435.  move.b (a2,d1.w),d5
  10436.  asl.l #8,d5
  10437.  move.b (a2,d2.w),d5
  10438.  swap d5
  10439.  move.b (a2,d4.w),d5
  10440.  add.l d5,d0
  10441.  move.l d0,(a3)+
  10442.  dbra d7,loop3
  10443.  
  10444.  tst.b swappedem
  10445.  beq.s .ok23
  10446.  exg a0,a1
  10447. .ok23:
  10448.  
  10449.  cmp.l Samp1endLEFT,a0
  10450.  blt.s .notoffendsamp3
  10451.  move.l #empty,a0
  10452.  move.l #emptyend,Samp1endLEFT
  10453.  move.b #0,vol1left
  10454.  st LEFTCHANDATA+1+4
  10455.  move.w #0,LEFTCHANDATA+2+4
  10456. .notoffendsamp3:
  10457.  
  10458.  cmp.l Samp3endLEFT,a1
  10459.  blt.s .notoffendsamp4
  10460.  move.l #empty,a1
  10461.  move.l #emptyend,Samp3endLEFT
  10462.  move.b #0,vol3left
  10463.  st LEFTCHANDATA+1+12
  10464.  move.w #0,LEFTCHANDATA+2+12
  10465. .notoffendsamp4:
  10466.  
  10467.  move.l a0,pos1LEFT
  10468.  move.l a1,pos3LEFT
  10469.  
  10470.  move.l pos1RIGHT,a0
  10471.  move.l pos3RIGHT,a1
  10472.  
  10473.  move.l Aupt3,a3
  10474.  move.l a3,$dff0c0
  10475.  move.l Auback3,Aupt3
  10476.  move.l a3,Auback3
  10477.  
  10478.  move.l #tab,a2
  10479.  
  10480.  moveq #0,d0
  10481.  moveq #0,d1
  10482.  move.b vol1right,d0
  10483.  move.b vol3right,d1
  10484.  cmp.b d1,d0
  10485.  slt.s swappedem
  10486.  bge.s fbig3
  10487.  
  10488.  exg a0,a1
  10489.  asl.w #6,d0
  10490.  divs d1,d0
  10491.  lsl.w #8,d0
  10492.  adda.w d0,a2
  10493.  move.w d1,$dff0c8
  10494.  bra.s donechan3
  10495.  
  10496. fbig3:
  10497.  tst.w d0
  10498.  beq.s donechan3
  10499.  asl.w #6,d1
  10500.  divs d0,d1
  10501.  lsl.w #8,d1
  10502.  adda.w d1,a2
  10503.  move.w d0,$dff0c8
  10504. donechan3:
  10505.  
  10506.  moveq #0,d0
  10507.  moveq #0,d1
  10508.  moveq #0,d2
  10509.  moveq #0,d3
  10510.  moveq #0,d4
  10511.  moveq #0,d5
  10512.  move.w #49,d7
  10513. loop4:
  10514.  move.l (a0)+,d0
  10515.  move.b (a1)+,d1
  10516.  move.b (a1)+,d2
  10517.  move.b (a1)+,d3
  10518.  move.b (a1)+,d4
  10519.  move.b (a2,d3.w),d5
  10520.  swap d5
  10521.  move.b (a2,d1.w),d5
  10522.  asl.l #8,d5
  10523.  move.b (a2,d2.w),d5
  10524.  swap d5
  10525.  move.b (a2,d4.w),d5
  10526.  add.l d5,d0
  10527.  move.l d0,(a3)+
  10528.  dbra d7,loop4
  10529.  
  10530.  tst.b swappedem
  10531.  beq.s .ok23
  10532.  exg a0,a1
  10533. .ok23:
  10534.  
  10535.  cmp.l Samp1endRIGHT,a0
  10536.  blt.s notoffendsamp3
  10537.  move.l #empty,a0
  10538.  move.l #emptyend,Samp1endRIGHT
  10539.  move.b #0,vol1right
  10540.  st RIGHTCHANDATA+1+4
  10541.  move.w #0,RIGHTCHANDATA+2+4
  10542. notoffendsamp3:
  10543.  
  10544.  cmp.l Samp3endRIGHT,a1
  10545.  blt.s notoffendsamp4
  10546.  move.l #empty,a1
  10547.  move.l #emptyend,Samp3endRIGHT
  10548.  move.b #0,vol3right
  10549.  st RIGHTCHANDATA+1+12
  10550.  move.w #0,RIGHTCHANDATA+2+12
  10551. notoffendsamp4:
  10552.  
  10553.  move.l a0,pos1RIGHT
  10554.  move.l a1,pos3RIGHT
  10555.  
  10556.  movem.l (a7)+,d0-d7/a0-a6
  10557.  tst.b counting
  10558.  beq .nostartcounter
  10559.  JSR STARTCOUNT
  10560. .nostartcounter:
  10561.  
  10562.  moveq #0,d0
  10563.  rts
  10564.  
  10565. ***********************************
  10566. * 4 channel sound routine
  10567. ***********************************
  10568.  
  10569. fourchannel:
  10570.  
  10571.  move.l #$dff000,a6
  10572.  
  10573.  btst #7,intreqrl(a6)
  10574.  beq.s nofinish0
  10575. ; move.w #0,LEFTCHANDATA+2
  10576. ; st LEFTCHANDATA+1
  10577.  move.l #null,$a0(a6)
  10578.  move.w #100,$a4(a6) 
  10579.  move.w #$0080,intreq(a6)
  10580. nofinish0:
  10581.  
  10582.  tst.b NoiseMade0pLEFT
  10583.  beq.s NoChan0sound
  10584.  
  10585.  move.l Samp0endLEFT,d0
  10586.  move.l pos0LEFT,d1
  10587.  sub.l d1,d0
  10588.  lsr.l #1,d0
  10589.  move.w d0,$a4(a6)
  10590.  move.l d1,$a0(a6)
  10591.  move.w #$8201,dmacon(a6)
  10592.  moveq #0,d0
  10593.  move.b vol0left,d0
  10594.  move.w d0,$a8(a6)
  10595.  
  10596. NoChan0sound:
  10597.  
  10598. *****************************************
  10599. *****************************************
  10600.  
  10601.  btst #0,intreqr(a6)
  10602.  beq.s nofinish1
  10603.  move.l #null,$b0(a6)
  10604.  move.w #100,$b4(a6)
  10605.  move.w #$0100,intreq(a6)
  10606. nofinish1:
  10607.  
  10608.  tst.b NoiseMade0pRIGHT
  10609.  beq.s NoChan1sound
  10610.  
  10611.  move.l Samp0endRIGHT,d0
  10612.  move.l pos0RIGHT,d1
  10613.  sub.l d1,d0
  10614.  lsr.l #1,d0
  10615.  move.w d0,$b4(a6)
  10616.  move.l d1,$b0(a6)
  10617.  move.w d0,playnull1
  10618.  move.w #$8202,dmacon(a6)
  10619.  moveq #0,d0
  10620.  move.b vol0right,d0
  10621.  move.w d0,$b8(a6)
  10622.  
  10623. NoChan1sound:
  10624.  
  10625. *****************************************
  10626. *****************************************
  10627.  
  10628.  btst #1,intreqr(a6)
  10629.  beq.s nofinish2
  10630.  move.l #null,$c0(a6)
  10631.  move.w #100,$c4(a6)
  10632.  move.w #$0200,intreq(a6)
  10633. nofinish2:
  10634.  
  10635.  tst.b NoiseMade1pRIGHT
  10636.  beq.s NoChan2sound
  10637.  
  10638.  move.l Samp1endRIGHT,d0
  10639.  move.l pos1RIGHT,d1
  10640.  sub.l d1,d0
  10641.  lsr.l #1,d0
  10642.  move.w d0,$c4(a6)
  10643.  move.w d0,playnull2
  10644.  
  10645.  move.l d1,$c0(a6)
  10646.  move.w #$8204,dmacon(a6)
  10647.  moveq #0,d0
  10648.  move.b vol1right,d0
  10649.  move.w d0,$c8(a6)
  10650.  
  10651. NoChan2sound:
  10652.  
  10653. *****************************************
  10654. *****************************************
  10655.  
  10656.  btst #2,intreqr(a6)
  10657.  beq.s nofinish3
  10658.  move.l #null,$d0(a6)
  10659.  move.w #100,$d4(a6)
  10660.  move.w #$0400,intreq(a6)
  10661. nofinish3:
  10662.  
  10663.  tst.b NoiseMade1pLEFT
  10664.  beq.s NoChan3sound
  10665.  
  10666.  move.l Samp1endLEFT,d0
  10667.  move.l pos1LEFT,d1
  10668.  sub.l d1,d0
  10669.  lsr.l #1,d0
  10670.  move.w d0,$d4(a6)
  10671.  move.w d0,playnull3
  10672.  move.l d1,$d0(a6)
  10673.  move.w #$8208,dmacon(a6)
  10674.  moveq #0,d0
  10675.  move.b vol1left,d0
  10676.  move.w d0,$d8(a6)
  10677.  
  10678. NoChan3sound:
  10679.  
  10680. nomorechannels:
  10681.  
  10682.  move.l NoiseMade0LEFT,NoiseMade0pLEFT
  10683.  move.l #0,NoiseMade0LEFT
  10684.  move.l NoiseMade0RIGHT,NoiseMade0pRIGHT
  10685.  move.l #0,NoiseMade0RIGHT
  10686.  
  10687. ; tst.b playnull0
  10688. ; beq.s .nnul
  10689. ; sub.b #1,playnull0
  10690. ; bra.s chan0still
  10691. ;.nnul:
  10692. ;chan0still:
  10693.  
  10694.  tst.b NoiseMade0pLEFT
  10695.  bne.s chan0still
  10696.  tst.w playnull0
  10697.  beq.s nnul0
  10698.  sub.w #100,playnull0
  10699.  bra.s chan0still
  10700. nnul0:
  10701.  move.w #0,LEFTCHANDATA+2
  10702.  st LEFTCHANDATA+1
  10703. chan0still:
  10704.  
  10705.  tst.b NoiseMade0pRIGHT
  10706.  bne.s chan1still
  10707.  tst.w playnull1
  10708.  beq.s nnul1
  10709.  sub.w #100,playnull1
  10710.  bra.s chan1still
  10711. nnul1:
  10712.  move.w #0,RIGHTCHANDATA+2
  10713.  st RIGHTCHANDATA+1
  10714. chan1still:
  10715.  
  10716.  tst.b NoiseMade1pRIGHT
  10717.  bne.s chan2still
  10718.  tst.w playnull2
  10719.  beq.s nnul2
  10720.  sub.w #100,playnull2
  10721.  bra.s chan2still
  10722. nnul2:
  10723.  move.w #0,RIGHTCHANDATA+2+4
  10724.  st RIGHTCHANDATA+1+4
  10725. chan2still:
  10726.  
  10727.  tst.b NoiseMade1pLEFT
  10728.  bne.s chan3still
  10729.  tst.w playnull3
  10730.  beq.s nnul3
  10731.  sub.w #100,playnull3
  10732.  bra.s chan3still
  10733. nnul3:
  10734.  move.w #0,LEFTCHANDATA+2+4
  10735.  st LEFTCHANDATA+1+4
  10736.  
  10737. chan3still:
  10738.  
  10739.  
  10740.  movem.l (a7)+,d0-d7/a0-a6
  10741.  
  10742.  moveq #0,d0
  10743.  rts
  10744.  
  10745. backbeat: dc.w 0
  10746.  
  10747. playnull0: dc.w 0
  10748. playnull1: dc.w 0
  10749. playnull2: dc.w 0
  10750. playnull3: dc.w 0
  10751.  
  10752. Samp0endRIGHT: dc.l emptyend
  10753. Samp1endRIGHT: dc.l emptyend
  10754. Samp2endRIGHT: dc.l emptyend
  10755. Samp3endRIGHT: dc.l emptyend
  10756. Samp0endLEFT: dc.l emptyend
  10757. Samp1endLEFT: dc.l emptyend
  10758. Samp2endLEFT: dc.l emptyend
  10759. Samp3endLEFT: dc.l emptyend
  10760.  
  10761. Aupt0: dc.l null
  10762. Auback0: dc.l null+500
  10763. Aupt2: dc.l null3
  10764. Auback2: dc.l null3+500
  10765. Aupt3: dc.l null4
  10766. Auback3: dc.l null4+500
  10767. Aupt1: dc.l null2
  10768. Auback1: dc.l null2+500
  10769.  
  10770. NoiseMade0LEFT: dc.b 0
  10771. NoiseMade1LEFT: dc.b 0
  10772. NoiseMade2LEFT: dc.b 0
  10773. NoiseMade3LEFT: dc.b 0
  10774. NoiseMade0pLEFT: dc.b 0
  10775. NoiseMade1pLEFT: dc.b 0
  10776. NoiseMade2pLEFT: dc.b 0
  10777. NoiseMade3pLEFT: dc.b 0
  10778. NoiseMade0RIGHT: dc.b 0
  10779. NoiseMade1RIGHT: dc.b 0
  10780. NoiseMade2RIGHT: dc.b 0
  10781. NoiseMade3RIGHT: dc.b 0
  10782. NoiseMade0pRIGHT: dc.b 0
  10783. NoiseMade1pRIGHT: dc.b 0
  10784. NoiseMade2pRIGHT: dc.b 0
  10785. NoiseMade3pRIGHT: dc.b 0
  10786.  
  10787. empty: ds.l 100
  10788. emptyend:
  10789.  
  10790. **************************************
  10791. * I want a routine to calculate all the
  10792. * info needed for the sound player to
  10793. * work, given say position of noise, volume
  10794. * and sample number.
  10795.  
  10796. Samplenum: dc.w 0
  10797. Noisex: dc.w 0
  10798. Noisez: dc.w 0
  10799. Noisevol: dc.w 0
  10800. chanpick: dc.w 0
  10801. IDNUM: dc.w 0
  10802. needleft: dc.b 0
  10803. needright: dc.b 0
  10804. STEREO: dc.b $0
  10805. even
  10806. prot6: dc.w 0
  10807.  
  10808.  even
  10809.  
  10810. CHANNELDATA:
  10811. LEFTCHANDATA:
  10812.  dc.l $00000000
  10813.  dc.l $00000000
  10814.  dc.l $FF000000
  10815.  dc.l $FF000000
  10816. RIGHTCHANDATA:
  10817.  dc.l $00000000
  10818.  dc.l $00000000
  10819.  dc.l $FF000000
  10820.  dc.l $FF000000
  10821.  
  10822. RIGHTPLAYEDTAB: ds.l 20
  10823. LEFTPLAYEDTAB: ds.l 20
  10824.  
  10825. MakeSomeNoise:
  10826.  
  10827. ; Plan for new sound handler:
  10828. ; It is sent a sample number,
  10829. ; a position relative to the
  10830. ; player, an id number and a volume.
  10831. ; Also notifplaying.
  10832.  
  10833. ; indirect inputs are the available
  10834. ; channel flags and whether or not
  10835. ; stereo sound is selected.
  10836.  
  10837. ; the algorithm must decide
  10838. ; whether the new sound is more
  10839. ; important than the ones already
  10840. ; playing. Thus an 'importance'
  10841. ; must be calculated, probably
  10842. ; using volume.
  10843.  
  10844. ; The output needs to be:
  10845.  
  10846. ; Write the pointers and volumes of
  10847. ; the sound channels
  10848.  
  10849.  
  10850.  tst.b notifplaying
  10851.  beq.s dontworry
  10852.  
  10853. ; find if we are already playing
  10854.  
  10855.  move.b IDNUM,d0
  10856.  move.w #7,d1
  10857.  lea CHANNELDATA,a3
  10858. findsameasme
  10859.  tst.b (a3)
  10860.  bne.s notavail
  10861.  cmp.b 1(a3),d0
  10862.  beq SameAsMe
  10863. notavail:
  10864.  add.w #4,a3
  10865.  dbra d1,findsameasme
  10866.  bra dontworry
  10867. SameAsMe
  10868.  rts
  10869.  
  10870. noiseloud: dc.w 0
  10871.  
  10872. dontworry:
  10873.  
  10874. ; Ok its fine for us to play a sound.
  10875. ; So calculate left/right volume.
  10876.  
  10877.  move.w Noisex,d1
  10878.  muls d1,d1
  10879.  move.w Noisez,d2
  10880.  muls d2,d2
  10881.  move.w #64,d3
  10882.  move.w #32767,noiseloud
  10883.  moveq #1,d0
  10884.  add.l d1,d2
  10885.  beq pastcalc
  10886.  
  10887.  move.w #31,d0
  10888. .findhigh
  10889.  btst d0,d2
  10890.  bne .foundhigh
  10891.  dbra d0,.findhigh
  10892. .foundhigh
  10893.  asr.w #1,d0
  10894.  clr.l d3
  10895.  bset d0,d3
  10896.  move.l d3,d0
  10897.  
  10898.  move.w d0,d3
  10899.  muls d3,d3    ; x*x
  10900.  sub.l d2,d3    ; x*x-a
  10901.  asr.l #1,d3    ; (x*x-a)/2
  10902.  divs d0,d3    ; (x*x-a)/2x
  10903.  sub.w d3,d0    ; second approx
  10904.  bgt .stillnot0
  10905.  move.w #1,d0
  10906. .stillnot0
  10907.  
  10908.  move.w d0,d3
  10909.  muls d3,d3
  10910.  sub.l d2,d3
  10911.  asr.l #1,d3
  10912.  divs d0,d3
  10913.  sub.w d3,d0    ; second approx
  10914.  bgt .stillnot02
  10915.  move.w #1,d0
  10916. .stillnot02
  10917.  
  10918.  move.w Noisevol,d3
  10919.  ext.l d3
  10920.  asl.l #6,d3
  10921.  cmp.l #32767,d3
  10922.  ble.s .nnnn
  10923.  move.l #32767,d3
  10924. .nnnn
  10925.  
  10926.  asr.w #2,d0
  10927.  addq #1,d0
  10928.  divs d0,d3
  10929.  
  10930.  move.w d3,noiseloud
  10931.  
  10932.  cmp.w #64,d3
  10933.  ble.s notooloud
  10934.  move.w #64,d3
  10935. notooloud:
  10936.  
  10937. pastcalc:
  10938.  
  10939.     ; d3 contains volume of noise.
  10940.     
  10941.  move.w d3,d4
  10942.  tst.b STEREO
  10943.  beq NOSTEREO
  10944.  
  10945.  move.w d3,d2
  10946.  muls Noisex,d2
  10947.  asl.w #2,d0
  10948.  divs d0,d2
  10949.  
  10950.  bgt.s quietleft
  10951.  add.w d2,d4
  10952.  bge.s donequiet
  10953.  move.w #0,d4
  10954.  bra.s donequiet
  10955. quietleft:
  10956.  sub.w d2,d3
  10957.  bge.s donequiet
  10958.  move.w #0,d3
  10959. donequiet:
  10960.  
  10961. ; d3=leftvol?
  10962. ; d4=rightvol?
  10963.  
  10964.  clr.w needleft
  10965.  
  10966.  cmp.b d3,d4
  10967.  bgt.s RightLouder
  10968.  
  10969. ; Left is louder; is it MUCH louder?
  10970.  
  10971.  st needleft
  10972.  move.w d3,d2
  10973.  sub.w d4,d2
  10974.  cmp.w #32,d2
  10975.  slt needright
  10976.  bra aboutsame
  10977.  
  10978. RightLouder:
  10979.  st needright
  10980.  move.w d4,d2
  10981.  sub.w d3,d2
  10982.  cmp.w #32,d2
  10983.  slt needleft
  10984.  
  10985. aboutsame:
  10986.  
  10987.  
  10988. ; Find least important sound on left
  10989.  
  10990.  move.l #0,a2
  10991.  move.l #0,d5
  10992.  move.w #32767,d2
  10993.  move.b IDNUM,d0
  10994.  lea LEFTCHANDATA,a3
  10995.  move.w #3,d1
  10996. FindLeftChannel
  10997.  tst.b (a3)
  10998.  bne.s .notactive
  10999.  cmp.b 1(a3),d0
  11000.  beq.s FOUNDLEFT
  11001.  cmp.w 2(a3),d2
  11002.  blt.s .notactive
  11003.  move.w 2(a3),d2
  11004.  move.l a3,a2
  11005.  move.w d5,d6
  11006.  
  11007. .notactive:
  11008.  add.w #4,a3
  11009.  add.w #1,d5
  11010.  dbra d1,FindLeftChannel
  11011.  move.l a2,a3
  11012.  bra.s gopastleft
  11013. FOUNDLEFT:
  11014.  move.w d5,d6
  11015. gopastleft:
  11016.  tst.l a3
  11017.  bne.s FOUNDALEFT
  11018.  rts
  11019. FOUNDALEFT:
  11020.  
  11021. ; d6 = channel number
  11022.  move.b d0,1(a3)
  11023.  move.w d3,2(a3)
  11024.  
  11025.  move.w Samplenum,d5
  11026.  move.l #SampleList,a3
  11027.  move.l (a3,d5.w*8),a1
  11028.  move.l 4(a3,d5.w*8),a2
  11029.  
  11030.  tst.b d6
  11031.  seq NoiseMade0LEFT
  11032.  beq.s .chan0
  11033.  cmp.b #2,d6
  11034.  slt NoiseMade1LEFT
  11035.  blt .chan1
  11036.  seq NoiseMade2LEFT
  11037.  beq .chan2
  11038.  st NoiseMade3LEFT
  11039.  
  11040.  move.b d5,LEFTPLAYEDTAB+9
  11041.  move.b d3,LEFTPLAYEDTAB+1+9
  11042.  move.b d4,LEFTPLAYEDTAB+2+9
  11043.  move.b d3,vol3left
  11044.  move.l a1,pos3LEFT
  11045.  move.l a2,Samp3endLEFT
  11046.  bra dorightchan
  11047.  
  11048. .chan0: 
  11049.  move.b d5,LEFTPLAYEDTAB
  11050.  move.b d3,LEFTPLAYEDTAB+1
  11051.  move.b d4,LEFTPLAYEDTAB+2
  11052.  move.l a1,pos0LEFT
  11053.  move.l a2,Samp0endLEFT
  11054.  move.b d3,vol0left
  11055.  bra dorightchan
  11056.  
  11057. .chan1:
  11058.  move.b d5,LEFTPLAYEDTAB+3
  11059.  move.b d3,LEFTPLAYEDTAB+1+3
  11060.  move.b d4,LEFTPLAYEDTAB+2+3
  11061.  move.b d3,vol1left
  11062.  move.l a1,pos1LEFT
  11063.  move.l a2,Samp1endLEFT
  11064.  bra dorightchan
  11065.  
  11066. .chan2: 
  11067.  move.b d5,LEFTPLAYEDTAB+6
  11068.  move.b d3,LEFTPLAYEDTAB+1+6
  11069.  move.b d4,LEFTPLAYEDTAB+2+6
  11070.  move.l a1,pos2LEFT
  11071.  move.l a2,Samp2endLEFT
  11072.  move.b d3,vol2left
  11073.  
  11074. dorightchan:
  11075.  
  11076. ; Find least important sound on right
  11077.  
  11078.  move.l #0,a2
  11079.  move.l #0,d5
  11080.  move.w #10000,d2
  11081.  move.b IDNUM,d0
  11082.  lea RIGHTCHANDATA,a3
  11083.  move.w #3,d1
  11084. FindRightChannel
  11085.  tst.b (a3)
  11086.  bne.s .notactive
  11087.  cmp.b 1(a3),d0
  11088.  beq.s FOUNDRIGHT
  11089.  cmp.w 2(a3),d2
  11090.  blt.s .notactive
  11091.  move.w 2(a3),d2
  11092.  move.l a3,a2
  11093.  move.w d5,d6
  11094.  
  11095. .notactive:
  11096.  add.w #4,a3
  11097.  add.w #1,d5
  11098.  dbra d1,FindRightChannel
  11099.  move.l a2,a3
  11100.  bra.s gopastright
  11101. FOUNDRIGHT:
  11102.  move.w d5,d6
  11103. gopastright:
  11104.  tst.l a3
  11105.  bne.s FOUNDARIGHT
  11106.  rts
  11107. FOUNDARIGHT:
  11108.  
  11109. ; d6 = channel number
  11110.  move.b d0,1(a3)
  11111.  move.w d3,2(a3)
  11112.  
  11113.  move.w Samplenum,d5
  11114.  move.l #SampleList,a3
  11115.  move.l (a3,d5.w*8),a1
  11116.  move.l 4(a3,d5.w*8),a2
  11117.  
  11118.  tst.b d6
  11119.  seq NoiseMade0RIGHT
  11120.  beq.s .chan0
  11121.  cmp.b #2,d6
  11122.  slt NoiseMade1RIGHT
  11123.  blt .chan1
  11124.  seq NoiseMade2RIGHT
  11125.  beq .chan2
  11126.  st NoiseMade3RIGHT
  11127.  
  11128.  move.b d5,RIGHTPLAYEDTAB+9
  11129.  move.b d3,RIGHTPLAYEDTAB+1+9
  11130.  move.b d4,RIGHTPLAYEDTAB+2+9
  11131.  move.b d4,vol3right
  11132.  move.l a1,pos3RIGHT
  11133.  move.l a2,Samp3endRIGHT
  11134.  rts
  11135.  
  11136. .chan0: 
  11137.  move.b d5,RIGHTPLAYEDTAB
  11138.  move.b d3,RIGHTPLAYEDTAB+1
  11139.  move.b d4,RIGHTPLAYEDTAB+2
  11140.  move.l a1,pos0RIGHT
  11141.  move.l a2,Samp0endRIGHT
  11142.  move.b d4,vol0right
  11143.  rts
  11144.  
  11145. .chan1:
  11146.  move.b d5,RIGHTPLAYEDTAB+3
  11147.  move.b d3,RIGHTPLAYEDTAB+1+3
  11148.  move.b d4,RIGHTPLAYEDTAB+2+3
  11149.  move.b d3,vol1right
  11150.  move.l a1,pos1RIGHT
  11151.  move.l a2,Samp1endRIGHT
  11152.  rts
  11153.  
  11154. .chan2: 
  11155.  move.b d5,RIGHTPLAYEDTAB+6
  11156.  move.b d3,RIGHTPLAYEDTAB+1+6
  11157.  move.b d4,RIGHTPLAYEDTAB+2+6
  11158.  move.l a1,pos2RIGHT
  11159.  move.l a2,Samp2endRIGHT
  11160.  move.b d3,vol2right
  11161.  rts
  11162.  
  11163. NOSTEREO:
  11164.  move.l #0,a2
  11165.  move.l #-1,d5
  11166.  move.w #32767,d2
  11167.  move.b IDNUM,d0
  11168.  lea CHANNELDATA,a3
  11169.  move.w #7,d1
  11170. FindChannel
  11171.  tst.b (a3)
  11172.  bne.s .notactive
  11173.  cmp.b 1(a3),d0
  11174.  beq.s FOUNDCHAN
  11175.  cmp.w 2(a3),d2
  11176.  blt.s .notactive
  11177.  move.w 2(a3),d2
  11178.  move.l a3,a2
  11179.  move.w d5,d6
  11180.  add.w #1,d6
  11181.  
  11182. .notactive:
  11183.  add.w #4,a3
  11184.  add.w #1,d5
  11185.  dbra d1,FindChannel
  11186.  
  11187.  move.l a2,a3
  11188.  bra.s gopastchan
  11189. FOUNDCHAN:
  11190.  move.w d5,d6
  11191.  add.w #1,d6
  11192. gopastchan:
  11193.  tst.w d6
  11194.  bge.s FOUNDACHAN
  11195. tooquiet:
  11196.  rts
  11197. FOUNDACHAN:
  11198.  
  11199. ; d6 = channel number
  11200.  
  11201.  cmp.w noiseloud,d2
  11202.  bgt.s tooquiet
  11203.  
  11204.  move.b d0,1(a3)
  11205.  move.w noiseloud,2(a3)
  11206.  
  11207.  move.w Samplenum,d5
  11208.  move.l #SampleList,a3
  11209.  move.l (a3,d5.w*8),a1
  11210.  move.l 4(a3,d5.w*8),a2
  11211.  
  11212.  tst.b d6
  11213.  beq .chan0
  11214.  cmp.b #2,d6
  11215.  blt .chan1
  11216.  beq .chan2
  11217.  cmp.b #4,d6
  11218.  blt .chan3
  11219.  beq .chan4
  11220.  cmp.b #6,d6
  11221.  blt .chan5
  11222.  beq .chan6
  11223.  st NoiseMade3RIGHT
  11224.  
  11225.  move.b d5,RIGHTPLAYEDTAB+9
  11226.  move.b d3,RIGHTPLAYEDTAB+1+9
  11227.  move.b d4,RIGHTPLAYEDTAB+2+9
  11228.  move.b d4,vol3right
  11229.  move.l a1,pos3RIGHT
  11230.  move.l a2,Samp3endRIGHT
  11231.  rts
  11232.  
  11233. .chan3:
  11234.  st NoiseMade3LEFT
  11235.  move.b d5,LEFTPLAYEDTAB+9
  11236.  move.b d3,LEFTPLAYEDTAB+1+9
  11237.  move.b d4,LEFTPLAYEDTAB+2+9
  11238.  move.b d3,vol3left
  11239.  move.l a1,pos3LEFT
  11240.  move.l a2,Samp3endLEFT
  11241.  bra dorightchan
  11242.  
  11243. .chan0: 
  11244.  st NoiseMade0LEFT
  11245.  move.b d5,LEFTPLAYEDTAB
  11246.  move.b d3,LEFTPLAYEDTAB+1
  11247.  move.b d4,LEFTPLAYEDTAB+2
  11248.  move.l a1,pos0LEFT
  11249.  move.l a2,Samp0endLEFT
  11250.  move.b d3,vol0left
  11251.  rts
  11252.  
  11253. .chan1:
  11254.  st NoiseMade1LEFT
  11255.  move.b d5,LEFTPLAYEDTAB+3
  11256.  move.b d3,LEFTPLAYEDTAB+1+3
  11257.  move.b d4,LEFTPLAYEDTAB+2+3
  11258.  move.b d3,vol1left
  11259.  move.l a1,pos1LEFT
  11260.  move.l a2,Samp1endLEFT
  11261.  rts
  11262.  
  11263. .chan2: 
  11264.  st NoiseMade2LEFT
  11265.  move.b d5,LEFTPLAYEDTAB+6
  11266.  move.b d3,LEFTPLAYEDTAB+1+6
  11267.  move.b d4,LEFTPLAYEDTAB+2+6
  11268.  move.l a1,pos2LEFT
  11269.  move.l a2,Samp2endLEFT
  11270.  move.b d3,vol2left
  11271.  rts
  11272.  
  11273. .chan4: 
  11274.  st NoiseMade0RIGHT
  11275.  move.b d5,RIGHTPLAYEDTAB
  11276.  move.b d3,RIGHTPLAYEDTAB+1
  11277.  move.b d4,RIGHTPLAYEDTAB+2
  11278.  move.l a1,pos0RIGHT
  11279.  move.l a2,Samp0endRIGHT
  11280.  move.b d4,vol0right
  11281.  rts
  11282.  
  11283. .chan5:
  11284.  st NoiseMade1RIGHT
  11285.  move.b d5,RIGHTPLAYEDTAB+3
  11286.  move.b d3,RIGHTPLAYEDTAB+1+3
  11287.  move.b d4,RIGHTPLAYEDTAB+2+3
  11288.  move.b d3,vol1right
  11289.  move.l a1,pos1RIGHT
  11290.  move.l a2,Samp1endRIGHT
  11291.  rts
  11292.  
  11293. .chan6: 
  11294.  st NoiseMade2RIGHT
  11295.  move.b d5,RIGHTPLAYEDTAB+6
  11296.  move.b d3,RIGHTPLAYEDTAB+1+6
  11297.  move.b d4,RIGHTPLAYEDTAB+2+6
  11298.  move.l a1,pos2RIGHT
  11299.  move.l a2,Samp2endRIGHT
  11300.  move.b d3,vol2right
  11301.  rts
  11302.  
  11303. SampleList:
  11304.  dc.l Scream,EndScream
  11305.  dc.l Shoot,EndShoot
  11306.  dc.l Munch,EndMunch
  11307.  dc.l PooGun,EndPooGun
  11308.  dc.l Collect,EndCollect
  11309. ;5
  11310.  dc.l DoorNoise,EndDoorNoise
  11311.  dc.l 0,0
  11312.  dc.l Stomp,EndStomp
  11313.  dc.l LowScream,EndLowScream
  11314.  dc.l BaddieGun,EndBaddieGun
  11315. ;10
  11316.  dc.l SwitchNoise,EndSwitch
  11317.  dc.l Reload,EndReload
  11318.  dc.l NoAmmo,EndNoAmmo
  11319.  dc.l Splotch,EndSplotch
  11320.  dc.l SplatPop,EndSplatPop
  11321. ;15
  11322.  dc.l Boom,EndBoom
  11323.  dc.l Hiss,EndHiss
  11324.  dc.l Howl1,EndHowl1
  11325.  dc.l Howl2,EndHowl2
  11326.  dc.l Pant,EndPant
  11327. ;20
  11328.  dc.l Whoosh,EndWhoosh
  11329.  dc.l ROAR,EndROAR
  11330.  dc.l whoosh,Endwhoosh
  11331.  dc.l 0,0
  11332.  dc.l 0,0
  11333.  dc.l 0,0
  11334.  dc.l 0,0
  11335.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  11336.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  11337.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  11338.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  11339.  
  11340.  dc.l 0
  11341.  
  11342. storeval: dc.w 0
  11343.  
  11344.  include "ab3:source_4000/wallchunk.s"
  11345.  include "ab3:source_4000/newloadfromdisk.s"
  11346.  include "ab3:source_4000/screensetup.s"
  11347.  include "ab3:source_4000/WBCONTROLLOOP.s"
  11348.  include "ab3:source_4000/WBSETUP"
  11349.  
  11350.  
  11351.  
  11352.  
  11353. saveinters:  
  11354.  dc.w 0
  11355.  
  11356. z: dc.w 10
  11357.  
  11358. notifplaying:
  11359.  dc.w 0
  11360.  
  11361. audpos1: dc.w 0
  11362. audpos1b: dc.w 0
  11363. audpos2: dc.w 0
  11364. audpos2b: dc.w 0
  11365. audpos3: dc.w 0
  11366. audpos3b: dc.w 0
  11367. audpos4: dc.w 0
  11368. audpos4b: dc.w 0
  11369.  
  11370. vol0left: dc.w 0
  11371. vol0right: dc.w 0
  11372. vol1left: dc.w 0
  11373. vol1right: dc.w 0
  11374. vol2left: dc.w 0
  11375. vol2right: dc.w 0
  11376. vol3left: dc.w 0
  11377. vol3right: dc.w 0
  11378.  
  11379. pos: dc.l 0
  11380.  
  11381. pos0LEFT: dc.l empty
  11382. pos1LEFT: dc.l empty
  11383. pos2LEFT: dc.l empty
  11384. pos3LEFT: dc.l empty
  11385. pos0RIGHT: dc.l empty
  11386. pos1RIGHT: dc.l empty
  11387. pos2RIGHT: dc.l empty
  11388. pos3RIGHT: dc.l empty
  11389.  
  11390. numtodo dc.w 0
  11391.  
  11392. npt: dc.w 0
  11393.  
  11394. pretab:
  11395. val SET 0
  11396.  REPT 128
  11397.  dc.b val
  11398. val SET val+1
  11399.  ENDR
  11400. val SET -128
  11401.  REPT 128
  11402.  dc.b val
  11403. val SET val+1
  11404.  ENDR 
  11405.  
  11406. tab:
  11407.  ds.b 256*65
  11408.  
  11409.  
  11410. test: dc.l 0
  11411.  ds.l 30
  11412.  
  11413.  even
  11414. ConstCols:
  11415. ; incbin "ConstCols"
  11416.  even
  11417. Smoothscalecols:
  11418. ; incbin "smoothbumppalscaled"
  11419.  even
  11420. SmoothTile:
  11421. ; incbin "smoothbumptile"
  11422.  even
  11423. Bumpscalecols:
  11424. ; incbin "Bumppalscaled"
  11425.  even
  11426. Bumptile:
  11427. ; incbin "bumptile"
  11428.  even
  11429. scalecols: ;incbin "bytepixpalscaled"
  11430.  even
  11431. floorscalecols:
  11432.  incbin "floor256pal"
  11433.  ds.w 256*4
  11434.  
  11435.  even
  11436. PaletteAddr: dc.l 0
  11437. ChunkAddr: dc.l 0
  11438. ;walltiles:
  11439. ; dc.l GreenMechanicWALL
  11440. ; dc.l BlueGreyMetalWALL
  11441. ; dc.l TechnoDetailWALL
  11442. ; dc.l BlueStoneWALL
  11443. ; dc.l RedAlertWALL
  11444. ; dc.l RockWALL
  11445. ;
  11446. ;GreenMechanicWALL: incbin "ab3:includes/walls/greenmechanic.wad"
  11447. ;BlueGreyMetalWALL: incbin "ab3:includes/walls/BlueGreyMetal.wad"
  11448. ;TechnoDetailWALL: incbin "ab3:includes/walls/TechnoDetail.wad"
  11449. ;BlueStoneWALL: incbin "ab3:includes/walls/bluestone.wad"
  11450. ;RedAlertWALL: incbin "ab3:includes/walls/redalert.wad"
  11451. ;RockWALL: incbin "ab3:includes/walls/rock.wad"
  11452.  
  11453. floortile:
  11454.  dc.l 0
  11455. ; incbin "floortile" 
  11456.  even
  11457. wallrouts:
  11458. ; incbin "2x2WallDraw" 
  11459.  CNOP 0,64
  11460. BackPicture:
  11461.  incbin "rawback"
  11462. EndBackPicture:
  11463.  
  11464. drawpt: dc.l 0
  11465. olddrawpt: dc.l 0
  11466. frompt: dc.l 0 
  11467.  
  11468. SineTable:
  11469.  incbin "bigsine"
  11470.  
  11471. angspd: dc.w 0
  11472. flooryoff: dc.w 0
  11473. xoff: dc.l 0
  11474. yoff: dc.l 0
  11475. yvel: dc.l 0
  11476. zoff: dc.l 0
  11477. tyoff: dc.l 0
  11478. xspdval: dc.l 0
  11479. zspdval: dc.l 0
  11480. Zone: dc.w 0
  11481.  
  11482. PLR1: dc.b $ff
  11483.  even
  11484. PLR1_energy: dc.w 191
  11485. PLR1_GunSelected: dc.w 0
  11486. PLR1_cosval: dc.w 0
  11487. PLR1_sinval: dc.w 0
  11488. PLR1_angpos: dc.w 0
  11489. PLR1_angspd: dc.w 0
  11490. PLR1_xoff: dc.l 0
  11491. PLR1_yoff: dc.l 0
  11492. PLR1_yvel: dc.l 0
  11493. PLR1_zoff: dc.l 0
  11494. PLR1_tyoff: dc.l 0
  11495. PLR1_xspdval: dc.l 0
  11496. PLR1_zspdval: dc.l 0
  11497. PLR1_Zone: dc.w 0
  11498. PLR1_Roompt: dc.l 0
  11499. PLR1_OldRoompt: dc.l 0
  11500. PLR1_PointsToRotatePtr: dc.l 0
  11501. PLR1_ListOfGraphRooms: dc.l 0
  11502. PLR1_oldxoff: dc.l 0
  11503. PLR1_oldzoff: dc.l 0
  11504. PLR1_StoodInTop: dc.b 0
  11505.  even
  11506. PLR1_height: dc.l 0
  11507. PLR1_RoomBright: dc.w 0
  11508.  
  11509. DOUBLEWIDTH: dc.b $0,0
  11510. DOUBLEHEIGHT: dc.b 0,0
  11511.  
  11512.  ds.w 4
  11513.  
  11514. OLDX1: dc.l 0
  11515. OLDX2: dc.l 0
  11516. OLDZ1: dc.l 0
  11517. OLDZ2: dc.l 0
  11518.  
  11519. XDIFF1: dc.l 0
  11520. ZDIFF1: dc.l 0
  11521. XDIFF2: dc.l 0
  11522. ZDIFF2: dc.l 0
  11523.  
  11524. PLR1s_cosval: dc.w 0
  11525. PLR1s_sinval: dc.w 0
  11526. PLR1s_angpos: dc.w 0
  11527. PLR1s_angspd: dc.w 0
  11528. PLR1s_xoff: dc.l 0
  11529. PLR1s_yoff: dc.l 0
  11530. PLR1s_yvel: dc.l 0
  11531. PLR1s_zoff: dc.l 0
  11532. PLR1s_tyoff: dc.l 0
  11533. PLR1s_xspdval: dc.l 0
  11534. PLR1s_zspdval: dc.l 0
  11535. PLR1s_Zone: dc.w 0
  11536. PLR1s_Roompt: dc.l 0
  11537. PLR1s_OldRoompt: dc.l 0
  11538. PLR1s_PointsToRotatePtr: dc.l 0
  11539. PLR1s_ListOfGraphRooms: dc.l 0
  11540. PLR1s_oldxoff: dc.l 0
  11541. PLR1s_oldzoff: dc.l 0
  11542. PLR1s_height: dc.l 0
  11543. PLR1s_targheight: dc.l 0
  11544.  
  11545. p1_xoff: dc.l 0
  11546. p1_zoff: dc.l 0
  11547. p1_yoff: dc.l 0
  11548. p1_height: dc.l 0
  11549. p1_angpos: dc.w 0
  11550. p1_bobble: dc.w 0
  11551. p1_clicked: dc.b 0
  11552. p1_spctap: dc.b 0
  11553. p1_ducked: dc.b 0
  11554. p1_gunselected: dc.b 0
  11555. p1_fire: dc.b 0
  11556.  even
  11557. p1_holddown: dc.w 0
  11558.  
  11559.  ds.w 4
  11560.  
  11561. PLR2: dc.b $ff
  11562.  even
  11563. PLR2_GunSelected: dc.w 0
  11564. PLR2_energy: dc.w 191
  11565. PLR2_cosval: dc.w 0
  11566. PLR2_sinval: dc.w 0
  11567. PLR2_angpos: dc.w 0
  11568. PLR2_angspd: dc.w 0
  11569. PLR2_xoff: dc.l 0
  11570. PLR2_yoff: dc.l 0
  11571. PLR2_yvel: dc.l 0
  11572. PLR2_zoff: dc.l 0
  11573. PLR2_tyoff: dc.l 0
  11574. PLR2_xspdval: dc.l 0
  11575. PLR2_zspdval: dc.l 0
  11576. PLR2_Zone: dc.w 0
  11577. PLR2_Roompt: dc.l 0
  11578. PLR2_OldRoompt: dc.l 0
  11579. PLR2_PointsToRotatePtr: dc.l 0
  11580. PLR2_ListOfGraphRooms: dc.l 0
  11581. PLR2_oldxoff: dc.l 0
  11582. PLR2_oldzoff: dc.l 0
  11583. PLR2_StoodInTop: dc.b 0
  11584.  even
  11585. PLR2_height: dc.l 0
  11586.  
  11587.  ds.w 4
  11588.  
  11589. PLR2s_cosval: dc.w 0
  11590. PLR2s_sinval: dc.w 0
  11591. PLR2s_angpos: dc.w 0
  11592. PLR2s_angspd: dc.w 0
  11593. PLR2s_xoff: dc.l 0
  11594. PLR2s_yoff: dc.l 0
  11595. PLR2s_yvel: dc.l 0
  11596. PLR2s_zoff: dc.l 0
  11597. PLR2s_tyoff: dc.l 0
  11598. PLR2s_xspdval: dc.l 0
  11599. PLR2s_zspdval: dc.l 0
  11600. PLR2s_Zone: dc.w 0
  11601. PLR2s_Roompt: dc.l 0
  11602. PLR2s_OldRoompt: dc.l 0
  11603. PLR2s_PointsToRotatePtr: dc.l 0
  11604. PLR2s_ListOfGraphRooms: dc.l 0
  11605. PLR2s_oldxoff: dc.l 0
  11606. PLR2s_oldzoff: dc.l 0
  11607. PLR2s_height: dc.l 0
  11608. PLR2s_targheight: dc.l 0
  11609.  
  11610.  ds.w 4
  11611.  
  11612. p2_xoff: dc.l 0
  11613. p2_zoff: dc.l 0
  11614. p2_yoff: dc.l 0
  11615. p2_height: dc.l 0
  11616. p2_angpos: dc.w 0
  11617. p2_bobble: dc.w 0
  11618. p2_clicked: dc.b 0
  11619. p2_spctap: dc.b 0
  11620. p2_ducked: dc.b 0
  11621. p2_gunselected: dc.b 0
  11622. p2_fire: dc.b 0
  11623.  even
  11624. p2_holddown: dc.w 0
  11625.  
  11626. liftanimtab:
  11627.  
  11628. endliftanimtab:
  11629.  
  11630. glassball:
  11631. ; incbin "glassball.inc"
  11632.  
  11633. endglass
  11634. glassballpt: dc.l glassball
  11635.  
  11636. rndtab: ; incbin "randfile"
  11637. endrnd: 
  11638.  
  11639. brightanimtab:
  11640.  dcb.w 200,20
  11641.  dc.w 5
  11642.  dc.w 10,20
  11643.  dc.w 5
  11644.  dcb.w 30,20
  11645.  dc.w 7,10,10,5,10,0,5,6,5,6,5,6,5,6,0
  11646.  dcb.w 40,0
  11647.  dc.w 1,2,3,2,3,2,3,2,3,2,3,2,3,0
  11648.  dcb.w 300,0
  11649.  dc.w 1,0,1,0,2,2,2,5,5,5,5,5,5,5,5,5,6,10
  11650.  dc.w -1
  11651.  
  11652. Roompt: dc.l 0
  11653. OldRoompt: dc.l 0
  11654.  
  11655. *****************************************************************
  11656.  *
  11657.  include "AB3:source_4000/LevelData2"
  11658.  *
  11659. *****************************************************************
  11660.  
  11661.  
  11662. wallpt: dc.l 0
  11663. floorpt: dc.l 0
  11664.  
  11665. Rotated:
  11666.  ds.l 2*800 
  11667. ObjRotated:
  11668.  ds.l 2*500
  11669.  
  11670. OnScreen:
  11671.  ds.l 2*800 
  11672.  
  11673. startwait: dc.w 0
  11674. endwait: dc.w 0
  11675.  
  11676. Faces:; incbin "faces2raw"
  11677.  
  11678. LINKS: ds.b 10000
  11679. FLYLINKS: ds.b 10000
  11680. *******************************************************************
  11681.  
  11682. consttab:
  11683.  incbin "constantfile"
  11684.  
  11685. *******************************************************************
  11686.  
  11687.  
  11688.  
  11689. *********************************
  11690.  
  11691. ; include "ab3:source_4000/loadmod.a"
  11692. ; include "ab3:source_4000/proplayer.a"
  11693.  
  11694.  
  11695. darkentab: 
  11696. ;val SET 0
  11697. ; REPT 256
  11698. ; dc.b val
  11699. ;val SET val+1
  11700. ; ENDR
  11701.  incbin "darkenfile"
  11702.  
  11703. MIDDLEX: dc.w 0
  11704. RIGHTX: dc.w 192
  11705. FULLSCR: dc.w 0
  11706.  
  11707. SHADINGTABLE: incbin "SHADEFILE" 
  11708.  
  11709. ******************************************
  11710. * Link file !*****************************
  11711. ******************************************
  11712.  
  11713. LINKSPACE:
  11714.  ds.l 22500
  11715. ; incbin "ab3:includes/test.lnk"
  11716.  
  11717. LINKname:
  11718.  dc.b "ab3:includes/test.lnk",0
  11719.  
  11720. LINKFILE:
  11721.  dc.l LINKSPACE
  11722.  
  11723. ******************************************
  11724.  
  11725.  
  11726. brightentab: incbin "brightenfile"
  11727. WorkSpace:
  11728.  ds.l 8192 
  11729. waterfile: incbin "waterfile"
  11730.  
  11731.  SECTION ffff,CODE_C
  11732.  
  11733. nullspr: dc.l 0
  11734.  
  11735.  cnop 0,8
  11736. borders:
  11737.  incbin "newleftbord"
  11738.  incbin "newrightbord"
  11739.  
  11740. health: incbin "healthstrip"
  11741. Ammunition: incbin "ammostrip"
  11742. healthpal: incbin "healthpal"
  11743. PanelKeys: incbin "greenkey"
  11744.  incbin "redkey"
  11745.  incbin "yellowkey"
  11746.  incbin "bluekey"
  11747.  
  11748. null: ds.w 500
  11749. null2: ds.w 500
  11750. null3: ds.w 500
  11751. null4: ds.w 500
  11752.  
  11753.  
  11754. Blurbfield:
  11755.  
  11756.  dc.w bpl1ptl
  11757. bl1l: dc.w 0
  11758.  dc.w bpl1pth
  11759. bl1h: dc.w 0
  11760.  
  11761.  dc.w diwstart,$2c81
  11762.  dc.w diwstop,$1cc1
  11763.  dc.w ddfstart,$38
  11764.  dc.w ddfstop,$b8
  11765.  dc.w bplcon0,$9201
  11766.  dc.w bplcon1,0
  11767.  dc.w $106,$c40
  11768. blcols:
  11769.  dc.w col0,0
  11770.  dc.w col1,$fff
  11771.  
  11772.  dc.w $108,0
  11773.  dc.w $10a,0
  11774.  
  11775.  dc.w $ffff,$fffe
  11776.  dc.w $ffff,$fffe
  11777.  
  11778. nullline:
  11779.  ds.b 80    
  11780.  
  11781.  include "ab3:source_4000/titlecop.s"
  11782.  
  11783. bigfield:    
  11784.                 ; Start of our copper list.
  11785.  dc.w dmacon,$8020
  11786.  dc.w intreq,$8011
  11787.  dc.w $1fc,$f
  11788.  dc.w diwstart
  11789. winstart: dc.w $2c81
  11790.  dc.w diwstop
  11791. winstop: dc.w $2cc1
  11792.  dc.w ddfstart
  11793. fetchstart: dc.w $38
  11794.  dc.w ddfstop
  11795. fetchstop: dc.w $b8
  11796.  
  11797. bordercols:
  11798.  incbin "borderpal"
  11799.  
  11800.  dc.w spr0ptl
  11801. s0l:
  11802.  dc.w 0
  11803.  dc.w spr0pth
  11804. s0h:
  11805.  dc.w 0
  11806.  dc.w spr1ptl
  11807. s1l:
  11808.  dc.w 0
  11809.  dc.w spr1pth
  11810. s1h:
  11811.  dc.w 0
  11812.  dc.w spr2ptl
  11813. s2l:
  11814.  dc.w 0
  11815.  dc.w spr2pth
  11816. s2h:
  11817.  dc.w 0
  11818.  dc.w spr3ptl
  11819. s3l:
  11820.  dc.w 0
  11821.  dc.w spr3pth
  11822. s3h:
  11823.  dc.w 0
  11824.  dc.w spr4ptl
  11825. s4l:
  11826.  dc.w 0
  11827.  dc.w spr4pth
  11828. s4h:
  11829.  dc.w 0
  11830.  dc.w spr5ptl
  11831. s5l:
  11832.  dc.w 0
  11833.  dc.w spr5pth
  11834. s5h:
  11835.  dc.w 0
  11836.  dc.w spr6ptl
  11837. s6l:
  11838.  dc.w 0
  11839.  dc.w spr6pth
  11840. s6h:
  11841.  dc.w 0
  11842.  dc.w spr7ptl
  11843. s7l:
  11844.  dc.w 0
  11845.  dc.w spr7pth
  11846. s7h:
  11847.  dc.w 0
  11848.  
  11849. ; dc.w $106,$c42
  11850. ; incbin "borderpal"
  11851.  
  11852.  dc.w $106,$c42
  11853.  
  11854.  dc.w bplcon0,$0211
  11855.  dc.w bplcon1
  11856. smoff:
  11857.  dc.w $0
  11858.  
  11859.  dc.w $108
  11860. modulo: dc.w 0
  11861.  dc.w $10a,0
  11862.  
  11863.  dc.w $1001,$ff00
  11864.  dc.w intreq,$11
  11865.  
  11866. PALETTESPACE:
  11867.  dcb.l 528,$1fe0000
  11868.  
  11869.  dc.w $2001,$ff00
  11870.  
  11871.  dc.w bpl1pth
  11872. pl1h
  11873.  dc.w 0
  11874.  
  11875.  dc.w bpl1ptl
  11876. pl1l
  11877.  dc.w 0
  11878.  
  11879.  dc.w bpl2pth
  11880. pl2h
  11881.  dc.w 0
  11882.  
  11883.  dc.w bpl2ptl
  11884. pl2l
  11885.  dc.w 0
  11886.  
  11887.  dc.w bpl3pth
  11888. pl3h
  11889.  dc.w 0
  11890.  
  11891.  dc.w bpl3ptl
  11892. pl3l
  11893.  dc.w 0
  11894.  
  11895.  dc.w bpl4pth
  11896. pl4h
  11897.  dc.w 0
  11898.  
  11899.  dc.w bpl4ptl
  11900. pl4l
  11901.  dc.w 0
  11902.  
  11903.  dc.w bpl5pth
  11904. pl5h
  11905.  dc.w 0
  11906.  
  11907.  dc.w bpl5ptl
  11908. pl5l
  11909.  dc.w 0
  11910.  
  11911.  dc.w bpl6pth
  11912. pl6h
  11913.  dc.w 0
  11914.  
  11915.  dc.w bpl6ptl
  11916. pl6l
  11917.  dc.w 0
  11918.  
  11919.  dc.w bpl7pth
  11920. pl7h
  11921.  dc.w 0
  11922.  
  11923.  dc.w bpl7ptl
  11924. pl7l
  11925.  dc.w 0
  11926.  
  11927.  dc.w bpl8pth
  11928. pl8h
  11929.  dc.w 0
  11930.  
  11931.  dc.w bpl8ptl
  11932. pl8l
  11933.  dc.w 0
  11934.  
  11935.  
  11936. val SET $2c
  11937. SCRMODULOS:
  11938.  REPT 240
  11939.  dc.b val,1,$ff,$fe
  11940.  dc.w $108,0
  11941.  dc.w $10a,0
  11942.  dc.b val,$df,$ff,$fe
  11943. val SET (val+1)&$ff
  11944.  ENDR
  11945.  
  11946.  dc.w $108,0,$10a,0
  11947.  
  11948. ; dc.w $80
  11949. ;JUMPBACKH:
  11950. ; dc.w 0
  11951. ; dc.w $82
  11952. ;JUMPBACKL:
  11953. ; dc.w 0
  11954.  
  11955. ; dc.w $8a,0
  11956.  
  11957.  dc.w $ffff,$fffe
  11958.  dc.w $ffff,$fffe
  11959.  
  11960. PALETTEBIT:
  11961.  incbin "256palette"
  11962.  dc.w $ffff,$fffe
  11963.  
  11964. yposcop:
  11965. ; dc.w $2a11,$fffe
  11966. ; dc.w $8a,0
  11967.  
  11968. ; ds.l 104*12
  11969.  
  11970. ;colbars:
  11971. ;val SET $2a
  11972. ; dcb.l 104*80,$1fe0000
  11973. ; dc.w $106,$c42
  11974. ; dc.w $80
  11975. ;pch1:
  11976. ; dc.w 0
  11977. ; dc.w $82
  11978. ;pcl1:
  11979. ; dc.w 0 
  11980. ; dc.w $88,0
  11981. ; dc.w $ffff,$fffe       ; End copper list.
  11982.  
  11983. ; ds.l 104*12
  11984.  
  11985.  
  11986. ;colbars2:
  11987. ;val SET $2a
  11988. ; dcb.l 104*80,$1fe0000
  11989. ; dc.w $106,$c42
  11990. ; dc.w $80
  11991. ;pch2:
  11992. ; dc.w 0
  11993. ; dc.w $82
  11994. ;pcl2:
  11995. ; dc.w 0
  11996. ; dc.w $88,0
  11997. ; dc.w $ffff,$fffe       ; End copper list.
  11998.  
  11999. ; ds.l 104*10
  12000.  
  12001. NullCopper:
  12002.  dc.w $ffff,$fffe
  12003.  
  12004. hitcol: dc.l 0
  12005.  
  12006. old: dc.l 0
  12007.  
  12008. prot5: dc.w 0
  12009. PanelCop:
  12010.  
  12011.  dc.w $80
  12012. och:
  12013.  dc.w 0
  12014.  dc.w $82
  12015. ocl:
  12016.  dc.w 0
  12017.  
  12018. statskip:
  12019.  dc.w $1fe,0
  12020.  dc.w $1fe,0
  12021.  
  12022.  dc.w $10c,0
  12023.  dc.w bplcon0,$1201
  12024.  dc.w bpl1ptl
  12025. n1l:
  12026.  dc.w 0
  12027.  dc.w bpl1pth
  12028. n1h:
  12029.  dc.w 0
  12030.  dc.w $108,-24
  12031.  incbin "Panelpal"
  12032.  
  12033.  dc.w bpl2pth
  12034. p2h
  12035.  dc.w 0
  12036.  
  12037.  dc.w bpl2ptl
  12038. p2l
  12039.  dc.w 0
  12040.  
  12041.  dc.w bpl3pth
  12042. p3h
  12043.  dc.w 0
  12044.  
  12045.  dc.w bpl3ptl
  12046. p3l
  12047.  dc.w 0
  12048.  
  12049.  dc.w bpl4pth
  12050. p4h
  12051.  dc.w 0
  12052.  dc.w bpl4ptl
  12053. p4l
  12054.  dc.w 0
  12055.  dc.w bpl5pth
  12056. p5h
  12057.  dc.w 0
  12058.  dc.w bpl5ptl
  12059. p5l
  12060.  dc.w 0
  12061.  dc.w bpl6pth
  12062. p6h
  12063.  dc.w 0
  12064.  dc.w bpl6ptl
  12065. p6l
  12066.  dc.w 0
  12067.  dc.w bpl7pth
  12068. p7h
  12069.  dc.w 0
  12070.  dc.w bpl7ptl
  12071. p7l
  12072.  dc.w 0
  12073.  dc.w bpl8pth
  12074. p8h
  12075.  dc.w 0
  12076.  dc.w bpl8ptl
  12077. p8l
  12078.  dc.w 0
  12079.  
  12080.  
  12081.  dc.w ddfstart,$38
  12082.  dc.w ddfstop,$b8
  12083.  dc.w diwstart,$2c81
  12084.  dc.w diwstop,$2cc1
  12085.  
  12086.  dc.w bplcon0
  12087. Panelcon: dc.w $0211
  12088.  dc.w bpl1pth
  12089. p1h
  12090.  dc.w 0
  12091.  
  12092.  dc.w bpl1ptl
  12093. p1l
  12094.  dc.w 0
  12095.  
  12096.  
  12097.  dc.w $108,40*7
  12098.  dc.w $10a,40*7
  12099.  
  12100.  dc.w $ffff,$fffe
  12101.  
  12102.  dc.w $180,$fff
  12103.  
  12104.  
  12105.  dc.w $f801,$ff00
  12106.  dc.w col1,$50
  12107.  dc.w $f901,$ff00
  12108.  dc.w col1,$90
  12109.  dc.w $fa01,$ff00
  12110.  dc.w col1,$f0
  12111.  dc.w $fb01,$ff00
  12112.  dc.w col1,$f0
  12113.  dc.w $fc01,$ff00
  12114.  dc.w col1,$90
  12115.  dc.w $fd01,$ff00
  12116.  dc.w col1,$50
  12117.  
  12118.  dc.w $fe01,$ff00
  12119.  dc.w col1,$fff
  12120.  
  12121.  dc.w $ffdf,$fffe
  12122.  dc.w $a01,$ff00
  12123.  dc.w bplcon0,$201
  12124.  
  12125.  incbin "faces2cols"
  12126.  dc.w bpl1pth
  12127. f1h
  12128.  dc.w 0
  12129.  
  12130.  dc.w bpl1ptl
  12131. f1l
  12132.  dc.w 0
  12133.  
  12134.  dc.w bpl2pth
  12135. f2h
  12136.  dc.w 0
  12137.  
  12138.  dc.w bpl2ptl
  12139. f2l
  12140.  dc.w 0
  12141.  
  12142.  dc.w bpl3pth
  12143. f3h
  12144.  dc.w 0
  12145.  
  12146.  dc.w bpl3ptl
  12147. f3l
  12148.  dc.w 0
  12149.  
  12150.  dc.w bpl4pth
  12151. f4h
  12152.  dc.w 0
  12153.  dc.w bpl4ptl
  12154. f4l
  12155.  dc.w 0
  12156.  
  12157.  dc.w bpl5pth
  12158. f5h
  12159.  dc.w 0
  12160.  dc.w bpl5ptl
  12161. f5l
  12162.  dc.w 0
  12163.  
  12164.  dc.w $0c01,$ff00
  12165.  dc.w bplcon0,$5201
  12166.   
  12167.  dc.w $ffff,$fffe
  12168.  
  12169.  cnop 0,64
  12170. FacePlace:
  12171. ; ds.l 6*32*5
  12172.  
  12173. TEXTSCRN: dc.l 0
  12174.  
  12175. TEXTCOP:
  12176.  dc.w intreq,$8030
  12177.  
  12178.  dc.w spr0ptl
  12179. txs0l:
  12180.  dc.w 0
  12181.  dc.w spr0pth
  12182. txs0h:
  12183.  dc.w 0
  12184.  dc.w spr1ptl
  12185. txs1l:
  12186.  dc.w 0
  12187.  dc.w spr1pth
  12188. txs1h:
  12189.  dc.w 0
  12190.  dc.w spr2ptl
  12191. txs2l:
  12192.  dc.w 0
  12193.  dc.w spr2pth
  12194. txs2h:
  12195.  dc.w 0
  12196.  dc.w spr3ptl
  12197. txs3l:
  12198.  dc.w 0
  12199.  dc.w spr3pth
  12200. txs3h:
  12201.  dc.w 0
  12202.  dc.w spr4ptl
  12203. txs4l:
  12204.  dc.w 0
  12205.  dc.w spr4pth
  12206. txs4h:
  12207.  dc.w 0
  12208.  dc.w spr5ptl
  12209. txs5l:
  12210.  dc.w 0
  12211.  dc.w spr5pth
  12212. txs5h:
  12213.  dc.w 0
  12214.  dc.w spr6ptl
  12215. txs6l:
  12216.  dc.w 0
  12217.  dc.w spr6pth
  12218. txs6h:
  12219.  dc.w 0
  12220.  dc.w spr7ptl
  12221. txs7l:
  12222.  dc.w 0
  12223.  dc.w spr7pth
  12224. txs7h:
  12225.  dc.w 0
  12226.  
  12227.  
  12228.  dc.w $10c,$0088
  12229.  
  12230.  dc.w $1fc,$f
  12231.  dc.w diwstart,$2c81    ; Top left corner of screen.
  12232.  dc.w diwstop,$2cc1     ; Bottom right corner of screen.
  12233.  dc.w ddfstart,$38      ; Data fetch start.
  12234.  dc.w ddfstop,$c8       ; Data fetch stop.
  12235.  
  12236.  dc.w bplcon0
  12237. TSCP:
  12238.  dc.w $9201
  12239.  
  12240.  dc.w $106,$c40
  12241.  
  12242.  dc.w $2a01,$ff00
  12243.  
  12244.  dc.w col0,0
  12245.  dc.w col1
  12246. TOPLET:
  12247. TXTCOLL:
  12248.  dc.w 0
  12249.   dc.w col2
  12250. BOTLET:
  12251.  dc.w 0
  12252.  dc.w col3
  12253. ALLTEXT:
  12254.  dc.w $fff
  12255.  dc.w $106,$e40
  12256.  dc.w col3
  12257. ALLTEXTLOW:
  12258.  dc.w $0
  12259.  
  12260.  
  12261.  dc.w bpl1pth
  12262. TSPTh:
  12263.  dc.w 0
  12264.  dc.w bpl1ptl
  12265. TSPTl:
  12266.  dc.w 0
  12267.  
  12268.  dc.w bpl2pth
  12269. TSPTh2:
  12270.  dc.w 0
  12271.  dc.w bpl2ptl
  12272. TSPTl2:
  12273.  dc.w 0
  12274.  
  12275.  
  12276.  dc.w $108,0
  12277.  dc.w $10a,0
  12278.  
  12279.  dc.w $ffff,$fffe
  12280.  
  12281. ********************************************
  12282. * Stuff you don't have to worry about yet. *
  12283. ********************************************
  12284.  
  12285. closeeverything:
  12286.  
  12287.  jsr mt_end
  12288.  
  12289.  move.l #nullcop,d0
  12290. ; move.l old,d0
  12291.  
  12292.  
  12293. ;charlie  
  12294.  move.l d0,$dff080     ; Restore old copper list.
  12295.  move.w d0,ocl
  12296.  swap d0
  12297.  move.w d0,och
  12298.  
  12299. ; move.l doslib,a6
  12300. ; move.l #4,d1
  12301. ; jsr -198(a6)
  12302.  
  12303. ; move.l doslib,d0
  12304. ; move.l d0,a1
  12305. ; move.l 4.w,a6
  12306. ; jsr CloseLib(a6)
  12307.  
  12308.  move.l #$dff000,a6
  12309.  move.w #$8020,dmacon(a6)
  12310.  move.w #$f,dmacon(a6)
  12311.  
  12312. ; move.l 4.w,a6
  12313. ; lea VBLANKInt,a1
  12314. ; moveq #INTB_COPER,d0
  12315. ; jsr _LVORemIntServer(a6)
  12316.  
  12317. ; IFEQ CD32VER
  12318. ; move.l OLDKINT,$68.w
  12319. ; ENDC
  12320. ; move.w saveinters,d0
  12321. ; or.w #$c000,d0
  12322. ; move.w d0,intena(a6)
  12323.  clr.w $dff0a8
  12324.  clr.w $dff0b8
  12325.  clr.w $dff0c8
  12326.  clr.w $dff0d8
  12327.  
  12328.  
  12329. ; move.l oldview,a1
  12330. ; move.l a1,d0
  12331. ; move.l gfxbase,a6
  12332. ; jsr -$de(a6)
  12333.  
  12334. ; cmp.b #'s',mors
  12335. ; beq.s leaveold
  12336. ; move.w #$f8e,$dff1dc
  12337. ;leaveold:
  12338.  
  12339.  jsr RELEASELEVELMEM
  12340.  jsr RELEASESCRNMEM
  12341.  
  12342.  move.l #0,d0
  12343.  
  12344.  rts
  12345.  
  12346.  
  12347.  
  12348. intbase: dc.l 0
  12349. gfxbase: dc.l 0
  12350. oldview: dc.l 0
  12351.  
  12352. stuff:
  12353.  
  12354.     PRSDL
  12355.     Lea    gfxname(pc),a1    
  12356.     Moveq.l    #0,d0
  12357.     Move.l    $4.w,a6    
  12358.     Jsr    -$228(a6)
  12359.     add.w d1,RVAL1
  12360.     Move.l     d0,gfxbase
  12361.     Move.l    d0,a6                Use As Base Reg
  12362.     Move.l    34(a6),oldview
  12363.     move.l 38(a6),old
  12364.     rts
  12365.  
  12366. gfxname dc.b "graphics.library",0
  12367.  even
  12368. INTUNAME    dc.b    "intuition.library",0
  12369.  
  12370.  even
  12371.  
  12372.  
  12373.  cnop 0,64
  12374.  
  12375. Panel:
  12376.  dc.l 0
  12377.  
  12378. TimerScr: 
  12379. ;ds.b 40*64
  12380.  
  12381. scrntab:
  12382.  ds.b 16
  12383. val SET 32
  12384.  REPT 96
  12385.  dc.b val,val,val
  12386. val SET val+1
  12387.  ENDR
  12388.  ds.b 16
  12389.  
  12390. smallscrntab:
  12391. val SET 32
  12392.  REPT 96
  12393.  dc.b val,val
  12394. val SET val+1
  12395.  ENDR
  12396.  
  12397.  cnop 0,64
  12398. scrn:
  12399.  incbin "ab3:includes/newborderRAW"
  12400.  ds.b 80
  12401. scrn2:
  12402.  incbin "ab3:includes/newborderRAW"
  12403.  ds.b 80
  12404.  
  12405. SCRNDRAWPT: dc.l scrn
  12406. SCRNSHOWPT: dc.l scrn2
  12407.  
  12408.  dcb.l 8,$33333333
  12409.  dc.l 0
  12410.  dc.l 0
  12411.  
  12412.  dcb.l 8,$0f0f0f0f
  12413.  dc.l 0
  12414.  dc.l 0
  12415.  
  12416.  dcb.l 8,$00ff00ff
  12417.  dc.l 0
  12418.  dc.l 0
  12419.  
  12420.  dcb.l 8,$0000ffff
  12421.  dc.l 0
  12422.  dc.l 0
  12423.  
  12424.  dc.l 0,-1,0,-1,0,-1,0,-1
  12425.  dc.l 0
  12426.  dc.l 0
  12427.  
  12428.  dc.l -1,-1,0,0,-1,-1,0,0
  12429.  dc.l 0
  12430.  dc.l 0
  12431.  
  12432.  dc.l 0,0,-1,-1,-1,-1,-1,-1
  12433.  dc.l 0
  12434.  dc.l 0
  12435.  
  12436. NumTimes: dc.l 0
  12437. TimeCount: dc.l 0
  12438. oldtime: dc.l 0
  12439. counting: dc.b 0
  12440. oktodisplay: dc.b 0
  12441.  
  12442. INITTIMER:
  12443.  move.l #0,TimeCount
  12444.  move.l #0,NumTimes
  12445.  rts
  12446.  
  12447. STARTCOUNT:
  12448.  move.l d0,-(a7)
  12449.  move.l $dff004,d0
  12450.  and.l #$1ffff,d0
  12451.  move.l d0,oldtime
  12452.  st counting
  12453.  move.l (a7)+,d0
  12454.  rts
  12455.  
  12456. STOPCOUNT:
  12457.  move.l d0,-(a7)
  12458.  move.l $dff004,d0
  12459.  and.l #$1ffff,d0
  12460.  
  12461.  sub.l oldtime,d0
  12462.  cmp.l #-256,d0
  12463.  bge.s okcount
  12464.  add.l #313*256,d0
  12465. okcount:
  12466.  add.l d0,TimeCount
  12467.  addq.l #1,NumTimes
  12468.  clr.b counting
  12469.  move.l (a7)+,d0
  12470.  rts
  12471.  
  12472. STOPCOUNTNOADD:
  12473.  move.l d0,-(a7)
  12474.  move.l $dff004,d0
  12475.  and.l #$1ffff,d0
  12476.  
  12477.  sub.l oldtime,d0
  12478.  cmp.l #-256,d0
  12479.  bge.s okcount2
  12480.  add.l #313*256,d0
  12481. okcount2:
  12482.  add.l d0,TimeCount
  12483.  clr.b counting
  12484.  move.l (a7)+,d0
  12485.  rts
  12486.  
  12487. maxbot: dc.w 0
  12488. tstneg: dc.l 0
  12489.  
  12490. STOPTIMER:
  12491.  st oktodisplay
  12492.  rts
  12493.  
  12494. digits: incbin "numbers.inc"
  12495.  
  12496. COMPACTMAP: ds.l 257
  12497.  
  12498. BIGMAP: ds.l 256*10
  12499.  
  12500.  Section Sounds,CODE_C
  12501.  
  12502. nullcop:
  12503.  dc.w $106,$c40
  12504.  dc.w $180,0 
  12505.  dc.w $100,$0
  12506.  dc.w $ffff,$fffe
  12507.  
  12508. Scream:
  12509. ; incbin "ab3:sounds/Scream"
  12510. ; ds.w 100
  12511. EndScream:
  12512. LowScream:
  12513. ; incbin "ab3:sounds/LowScream"
  12514. ; ds.w 100
  12515. EndLowScream:
  12516. BaddieGun:
  12517. ; incbin "ab3:sounds/BaddieGun"
  12518. EndBaddieGun:
  12519. bass:
  12520. ; incbin "ab3:sounds/backbass+drum"
  12521. bassend:
  12522. Shoot:
  12523. ; incbin "ab3:sounds/fire!"
  12524. EndShoot:
  12525. Munch:
  12526. ; incbin "ab3:sounds/munch"
  12527. EndMunch:
  12528. PooGun:
  12529. ; incbin "ab3:sounds/shoot.dm"
  12530. EndPooGun:
  12531. Collect:
  12532. ; incbin "ab3:sounds/collect"
  12533. EndCollect:
  12534. DoorNoise:
  12535. ; incbin "ab3:sounds/newdoor"
  12536. EndDoorNoise:
  12537. Stomp:
  12538. ; incbin "ab3:sounds/footstep3"
  12539. EndStomp:
  12540. SwitchNoise:
  12541. ; incbin "ab3:sounds/switch"
  12542. EndSwitch:
  12543. Reload:
  12544. ; incbin "ab3:sounds/switch1.SFX"
  12545. EndReload:
  12546.  
  12547. CHEATFRAME:
  12548.  dc.b 26,20,33,27,17,12
  12549. ENDCHEAT:
  12550.  
  12551. NoAmmo:
  12552. ; incbin "ab3:sounds/noammo"
  12553. EndNoAmmo:
  12554. Splotch:
  12555. ; incbin "ab3:sounds/splotch"
  12556. EndSplotch:
  12557. SplatPop:
  12558. ; incbin "ab3:sounds/splatpop"
  12559. EndSplatPop:
  12560. Boom:
  12561. ; incbin "ab3:sounds/boom"
  12562. EndBoom:
  12563. Hiss:
  12564. ; incbin "ab3:sounds/newhiss"
  12565. EndHiss:
  12566. Howl1:
  12567. ; incbin "ab3:sounds/howl1"
  12568. EndHowl1:
  12569. Howl2:
  12570. ; incbin "ab3:sounds/howl2"
  12571. EndHowl2:
  12572. Pant:
  12573. ; incbin "ab3:sounds/pant"
  12574. EndPant:
  12575. Whoosh:
  12576. ; incbin "ab3:sounds/whoosh"
  12577. EndWhoosh:
  12578. ROAR:
  12579. ; incbin "ab3:sounds/bigscream"
  12580. EndROAR
  12581. whoosh:
  12582. ; incbin "ab3:sounds/flame"
  12583. Endwhoosh:
  12584.  SECTION music,code_c
  12585.  
  12586. UseAllChannels: dc.w 0
  12587.  
  12588. mt_init:move.l    mt_data,a0
  12589.     move.l    a0,a1
  12590.     add.l    #$3b8,a1
  12591.     moveq    #$7f,d0
  12592.     moveq    #0,d1
  12593. mt_loop:move.l    d1,d2
  12594.     subq.w    #1,d0
  12595. mt_lop2:move.b    (a1)+,d1
  12596.     cmp.b    d2,d1
  12597.     bgt.s    mt_loop
  12598.     dbf    d0,mt_lop2
  12599.     addq.b    #1,d2
  12600.  
  12601.     lea    mt_samplestarts(pc),a1
  12602.     asl.l    #8,d2
  12603.     asl.l    #2,d2
  12604.     add.l    #$43c,d2
  12605.     add.l    a0,d2
  12606.     move.l    d2,a2
  12607.     moveq    #$1e,d0
  12608. mt_lop3:clr.l    (a2)
  12609.     move.l    a2,(a1)+
  12610.     moveq    #0,d1
  12611.     move.w    42(a0),d1
  12612.     asl.l    #1,d1
  12613.     add.l    d1,a2
  12614.     add.l    #$1e,a0
  12615.     dbf    d0,mt_lop3
  12616.  
  12617.     or.b    #$2,$bfe001
  12618.     move.b    #$6,mt_speed
  12619.     clr.w    $dff0a8
  12620.     clr.w    $dff0b8
  12621.     clr.w    $dff0c8
  12622.     clr.w    $dff0d8
  12623.     clr.b    mt_songpos
  12624.     clr.b    mt_counter
  12625.     clr.w    mt_pattpos
  12626.     rts
  12627.  
  12628. mt_end:    clr.w    $dff0a8
  12629.     clr.w    $dff0b8
  12630.     clr.w    $dff0c8
  12631.     clr.w    $dff0d8
  12632.     move.w    #$f,$dff096
  12633.     rts
  12634.  
  12635. mt_music:
  12636.     movem.l    d0-d4/a0-a3/a5-a6,-(a7)
  12637.     move.l    mt_data,a0
  12638.     addq.b    #$1,mt_counter
  12639.     move.b    mt_counter,D0
  12640.     cmp.b    mt_speed,D0
  12641.     blt.s    mt_nonew
  12642.     clr.b    mt_counter
  12643.     bra    mt_getnew
  12644.  
  12645. mt_nonew:
  12646.     lea    mt_voice1(pc),a6
  12647.     lea    $dff0a0,a5
  12648.     bsr    mt_checkcom
  12649.     lea    mt_voice2(pc),a6
  12650.     lea    $dff0b0,a5
  12651.     bsr    mt_checkcom
  12652.     tst.b UseAllChannels
  12653.     beq mt_endr
  12654.      lea    mt_voice3(pc),a6
  12655.     lea    $dff0c0,a5
  12656.     bsr    mt_checkcom
  12657.     lea    mt_voice4(pc),a6
  12658.     lea    $dff0d0,a5
  12659.     bsr    mt_checkcom
  12660.     bra    mt_endr
  12661.  
  12662. mt_arpeggio:
  12663.     moveq    #0,d0
  12664.     move.b    mt_counter,d0
  12665.     divs    #$3,d0
  12666.     swap    d0
  12667.     cmp.w    #$0,d0
  12668.     beq.s    mt_arp2
  12669.     cmp.w    #$2,d0
  12670.     beq.s    mt_arp1
  12671.  
  12672.     moveq    #0,d0
  12673.     move.b    $3(a6),d0
  12674.     lsr.b    #4,d0
  12675.     bra.s    mt_arp3
  12676. mt_arp1:moveq    #0,d0
  12677.     move.b    $3(a6),d0
  12678.     and.b    #$f,d0
  12679.     bra.s    mt_arp3
  12680. mt_arp2:move.w    $10(a6),d2
  12681.     bra.s    mt_arp4
  12682. mt_arp3:asl.w    #1,d0
  12683.     moveq    #0,d1
  12684.     move.w    $10(a6),d1
  12685.     lea    mt_periods(pc),a0
  12686.     moveq    #$24,d7
  12687. mt_arploop:
  12688.     move.w    (a0,d0.w),d2
  12689.     cmp.w    (a0),d1
  12690.     bge.s    mt_arp4
  12691.     addq.l    #2,a0
  12692.     dbf    d7,mt_arploop
  12693.     rts
  12694. mt_arp4:move.w    d2,$6(a5)
  12695.     rts
  12696.  
  12697. mt_getnew:
  12698.     move.l    mt_data,a0
  12699.     move.l    a0,a3
  12700.     move.l    a0,a2
  12701.     add.l    #$c,a3
  12702.     add.l    #$3b8,a2
  12703.     add.l    #$43c,a0
  12704.  
  12705.     moveq    #0,d0
  12706.     move.l    d0,d1
  12707.     move.b    mt_songpos,d0
  12708.     move.b    (a2,d0.w),d1
  12709.     asl.l    #8,d1
  12710.     asl.l    #2,d1
  12711.     add.w    mt_pattpos,d1
  12712.     clr.w    mt_dmacon
  12713.  
  12714.     lea    $dff0a0,a5
  12715.     lea    mt_voice1(pc),a6
  12716.     bsr    mt_playvoice
  12717.     lea    $dff0b0,a5
  12718.     lea    mt_voice2(pc),a6
  12719.     bsr    mt_playvoice
  12720.     tst.b UseAllChannels
  12721.     beq mt_setdma
  12722.     lea    $dff0c0,a5
  12723.     lea    mt_voice3(pc),a6
  12724.     bsr    mt_playvoice
  12725.     lea    $dff0d0,a5
  12726.     lea    mt_voice4(pc),a6
  12727.     bsr    mt_playvoice
  12728.     bra    mt_setdma
  12729.  
  12730. PROTCALC:
  12731. ;    include "ab3:source_4000/protcalc.s"
  12732.     incbin "ab3:includes/protcalc.bin"
  12733. ENDPROTCALC:
  12734.  
  12735. mt_playvoice:
  12736.     move.l    (a0,d1.l),(a6)
  12737.     addq.l    #4,d1
  12738.     moveq    #0,d2
  12739.     move.b    $2(a6),d2
  12740.     and.b    #$f0,d2
  12741.     lsr.b    #4,d2
  12742.     move.b    (a6),d0
  12743.     and.b    #$f0,d0
  12744.     or.b    d0,d2
  12745.     tst.b    d2
  12746.     beq.s    mt_setregs
  12747.     moveq    #0,d3
  12748.     lea    mt_samplestarts(pc),a1
  12749.     move.l    d2,d4
  12750.     subq.l    #$1,d2
  12751.     asl.l    #2,d2
  12752.     mulu    #$1e,d4
  12753.     move.l    (a1,d2.l),$4(a6)
  12754.     move.w    (a3,d4.l),$8(a6)
  12755.     move.w    $2(a3,d4.l),$12(a6)
  12756.     move.w    $4(a3,d4.l),d3
  12757.     tst.w    d3
  12758.     beq.s    mt_noloop
  12759.     move.l    $4(a6),d2
  12760.     asl.w    #1,d3
  12761.     add.l    d3,d2
  12762.     move.l    d2,$a(a6)
  12763.     move.w    $4(a3,d4.l),d0
  12764.     add.w    $6(a3,d4.l),d0
  12765.     move.w    d0,8(a6)
  12766.     move.w    $6(a3,d4.l),$e(a6)
  12767.     move.w    $12(a6),d0
  12768.     asr.w #2,d0
  12769.     move.w d0,$8(a5)
  12770.     bra.s    mt_setregs
  12771. mt_noloop:
  12772.     move.l    $4(a6),d2
  12773.     add.l    d3,d2
  12774.     move.l    d2,$a(a6)
  12775.     move.w    $6(a3,d4.l),$e(a6)
  12776.     move.w    $12(a6),d0
  12777.     asr.w #2,d0
  12778.     move.w d0,$8(a5)
  12779. mt_setregs:
  12780.     move.w    (a6),d0
  12781.     and.w    #$fff,d0
  12782.     beq    mt_checkcom2
  12783.     move.b    $2(a6),d0
  12784.     and.b    #$F,d0
  12785.     cmp.b    #$3,d0
  12786.     bne.s    mt_setperiod
  12787.     bsr    mt_setmyport
  12788.     bra    mt_checkcom2
  12789. mt_setperiod:
  12790.     move.w    (a6),$10(a6)
  12791.     and.w    #$fff,$10(a6)
  12792.     move.w    $14(a6),d0
  12793.     move.w    d0,$dff096
  12794.     clr.b    $1b(a6)
  12795.  
  12796.     move.l    $4(a6),(a5)
  12797.     move.w    $8(a6),$4(a5)
  12798.     move.w    $10(a6),d0
  12799.     and.w    #$fff,d0
  12800.     move.w    d0,$6(a5)
  12801.     move.w    $14(a6),d0
  12802.     or.w    d0,mt_dmacon
  12803.     bra    mt_checkcom2
  12804.  
  12805. mt_setdma:
  12806.      move.w #250,d0
  12807. mt_wait:
  12808.      add.w #1,testchip
  12809.      dbra d0,mt_wait
  12810.     move.w    mt_dmacon,d0
  12811.     or.w    #$8000,d0
  12812.     and.w #%1111111111110011,d0
  12813.     move.w    d0,$dff096
  12814.     move.w #250,d0
  12815. mt_wait2:
  12816.     add.w #1,testchip
  12817.     dbra    d0,mt_wait2
  12818.     lea    $dff000,a5
  12819.     tst.b UseAllChannels
  12820.     beq.s noall
  12821.     lea    mt_voice4(pc),a6
  12822.     move.l    $a(a6),$d0(a5)
  12823.     move.w    $e(a6),$d4(a5)
  12824.     lea    mt_voice3(pc),a6
  12825.     move.l    $a(a6),$c0(a5)
  12826.     move.w    $e(a6),$c4(a5)
  12827. noall:
  12828.     lea    mt_voice2(pc),a6
  12829.     move.l    $a(a6),$b0(a5)
  12830.     move.w    $e(a6),$b4(a5)
  12831.     lea    mt_voice1(pc),a6
  12832.     move.l    $a(a6),$a0(a5)
  12833.     move.w    $e(a6),$a4(a5)
  12834.  
  12835.     add.w    #$10,mt_pattpos
  12836.     cmp.w    #$400,mt_pattpos
  12837.     bne.s    mt_endr
  12838. mt_nex:    clr.w    mt_pattpos
  12839.     clr.b    mt_break
  12840.     addq.b    #1,mt_songpos
  12841.     and.b    #$7f,mt_songpos
  12842.     move.b    mt_songpos,d1
  12843. ;    cmp.b    mt_data+$3b6,d1
  12844. ;    bne.s    mt_endr
  12845. ;    move.b    mt_data+$3b7,mt_songpos
  12846. mt_endr:tst.b    mt_break
  12847.     bne.s    mt_nex
  12848.     movem.l    (a7)+,d0-d4/a0-a3/a5-a6
  12849.     rts
  12850.  
  12851. mt_setmyport:
  12852.     move.w    (a6),d2
  12853.     and.w    #$fff,d2
  12854.     move.w    d2,$18(a6)
  12855.     move.w    $10(a6),d0
  12856.     clr.b    $16(a6)
  12857.     cmp.w    d0,d2
  12858.     beq.s    mt_clrport
  12859.     bge.s    mt_rt
  12860.     move.b    #$1,$16(a6)
  12861.     rts
  12862. mt_clrport:
  12863.     clr.w    $18(a6)
  12864. mt_rt:    rts
  12865.  
  12866. CODESTORE: dc.l 0
  12867.  
  12868. mt_myport:
  12869.     move.b    $3(a6),d0
  12870.     beq.s    mt_myslide
  12871.     move.b    d0,$17(a6)
  12872.     clr.b    $3(a6)
  12873. mt_myslide:
  12874.     tst.w    $18(a6)
  12875.     beq.s    mt_rt
  12876.     moveq    #0,d0
  12877.     move.b    $17(a6),d0
  12878.     tst.b    $16(a6)
  12879.     bne.s    mt_mysub
  12880.     add.w    d0,$10(a6)
  12881.     move.w    $18(a6),d0
  12882.     cmp.w    $10(a6),d0
  12883.     bgt.s    mt_myok
  12884.     move.w    $18(a6),$10(a6)
  12885.     clr.w    $18(a6)
  12886. mt_myok:move.w    $10(a6),$6(a5)
  12887.     rts
  12888. mt_mysub:
  12889.     sub.w    d0,$10(a6)
  12890.     move.w    $18(a6),d0
  12891.     cmp.w    $10(a6),d0
  12892.     blt.s    mt_myok
  12893.     move.w    $18(a6),$10(a6)
  12894.     clr.w    $18(a6)
  12895.     move.w    $10(a6),$6(a5)
  12896.     rts
  12897.  
  12898. mt_vib:    move.b    $3(a6),d0
  12899.     beq.s    mt_vi
  12900.     move.b    d0,$1a(a6)
  12901.  
  12902. mt_vi:    move.b    $1b(a6),d0
  12903.     lea    mt_sin(pc),a4
  12904.     lsr.w    #$2,d0
  12905.     and.w    #$1f,d0
  12906.     moveq    #0,d2
  12907.     move.b    (a4,d0.w),d2
  12908.     move.b    $1a(a6),d0
  12909.     and.w    #$f,d0
  12910.     mulu    d0,d2
  12911.     lsr.w    #$6,d2
  12912.     move.w    $10(a6),d0
  12913.     tst.b    $1b(a6)
  12914.     bmi.s    mt_vibmin
  12915.     add.w    d2,d0
  12916.     bra.s    mt_vib2
  12917. mt_vibmin:
  12918.     sub.w    d2,d0
  12919. mt_vib2:move.w    d0,$6(a5)
  12920.     move.b    $1a(a6),d0
  12921.     lsr.w    #$2,d0
  12922.     and.w    #$3c,d0
  12923.     add.b    d0,$1b(a6)
  12924.     rts
  12925.  
  12926. mt_nop:    move.w    $10(a6),$6(a5)
  12927.     rts
  12928.  
  12929.  
  12930. mt_checkcom:
  12931.     move.w    $2(a6),d0
  12932.     and.w    #$fff,d0
  12933.     beq.s    mt_nop
  12934.     move.b    $2(a6),d0
  12935.     and.b    #$f,d0
  12936.     tst.b    d0
  12937.     beq    mt_arpeggio
  12938.     cmp.b    #$1,d0
  12939.     beq.s    mt_portup
  12940.     cmp.b    #$2,d0
  12941.     beq    mt_portdown
  12942.     cmp.b    #$3,d0
  12943.     beq    mt_myport
  12944.     cmp.b    #$4,d0
  12945.     beq    mt_vib
  12946.     move.w    $10(a6),$6(a5)
  12947.     cmp.b    #$a,d0
  12948.     beq.s    mt_volslide
  12949.     rts
  12950.  
  12951. mt_volslide:
  12952.     moveq    #0,d0
  12953.     move.b    $3(a6),d0
  12954.     lsr.b    #4,d0
  12955.     tst.b    d0
  12956.     beq.s    mt_voldown
  12957.     add.w    d0,$12(a6)
  12958.     cmp.w    #$40,$12(a6)
  12959.     bmi.s    mt_vol2
  12960.     move.w    #$40,$12(a6)
  12961. mt_vol2:move.w    $12(a6),d0
  12962.     asr.w #2,d0
  12963.     move.w d0,$8(a5)
  12964.     rts
  12965.  
  12966. mt_voldown:
  12967.     moveq    #0,d0
  12968.     move.b    $3(a6),d0
  12969.     and.b    #$f,d0
  12970.     sub.w    d0,$12(a6)
  12971.     bpl.s    mt_vol3
  12972.     clr.w    $12(a6)
  12973. mt_vol3:move.w    $12(a6),d0
  12974.     asr.w #2,d0
  12975.     move.w d0,$8(a5)
  12976.     rts
  12977.  
  12978. mt_portup:
  12979.     moveq    #0,d0
  12980.     move.b    $3(a6),d0
  12981.     sub.w    d0,$10(a6)
  12982.     move.w    $10(a6),d0
  12983.     and.w    #$fff,d0
  12984.     cmp.w    #$71,d0
  12985.     bpl.s    mt_por2
  12986.     and.w    #$f000,$10(a6)
  12987.     or.w    #$71,$10(a6)
  12988. mt_por2:move.w    $10(a6),d0
  12989.     and.w    #$fff,d0
  12990.     move.w    d0,$6(a5)
  12991.     rts
  12992.  
  12993. mt_portdown:
  12994.     clr.w    d0
  12995.     move.b    $3(a6),d0
  12996.     add.w    d0,$10(a6)
  12997.     move.w    $10(a6),d0
  12998.     and.w    #$fff,d0
  12999.     cmp.w    #$358,d0
  13000.     bmi.s    mt_por3
  13001.     and.w    #$f000,$10(a6)
  13002.     or.w    #$358,$10(a6)
  13003. mt_por3:move.w    $10(a6),d0
  13004.     and.w    #$fff,d0
  13005.     move.w    d0,$6(a5)
  13006.     rts
  13007.  
  13008. mt_checkcom2:
  13009.     move.b    $2(a6),d0
  13010.     and.b    #$f,d0
  13011.     cmp.b    #$e,d0
  13012.     beq.s    mt_setfilt
  13013.     cmp.b    #$d,d0
  13014.     beq.s    mt_pattbreak
  13015.     cmp.b    #$b,d0
  13016.     beq.s    mt_posjmp
  13017.     cmp.b    #$c,d0
  13018.     beq.s    mt_setvol
  13019.     cmp.b    #$f,d0
  13020.     beq.s    mt_setspeed
  13021.     rts
  13022.  
  13023. mt_setfilt:
  13024.     move.b    $3(a6),d0
  13025.     and.b    #$1,d0
  13026.     asl.b    #$1,d0
  13027.     and.b    #$fd,$bfe001
  13028.     or.b    d0,$bfe001
  13029.     rts
  13030. mt_pattbreak:
  13031.     not.b    mt_break
  13032.     rts
  13033. mt_posjmp:
  13034.     st reachedend
  13035.     move.b    $3(a6),d0
  13036.     subq.b    #$1,d0
  13037.     move.b    d0,mt_songpos
  13038.     not.b    mt_break
  13039.     rts
  13040. mt_setvol:
  13041.     cmp.b    #$40,$3(a6)
  13042.     ble.s    mt_vol4
  13043.     move.b    #$40,$3(a6)
  13044. mt_vol4:move.b    $3(a6),d0
  13045.     asr.w #2,d0
  13046.     move.w d0,$8(a5)
  13047.     rts
  13048. mt_setspeed:
  13049.     cmp.b    #$1f,$3(a6)
  13050.     ble.s    mt_sets
  13051.     move.b    #$1f,$3(a6)
  13052. mt_sets:move.b    $3(a6),d0
  13053.     beq.s    mt_rts2
  13054.     move.b    d0,mt_speed
  13055.     clr.b    mt_counter
  13056. mt_rts2:rts
  13057.  
  13058. mt_sin:
  13059.  DC.b $00,$18,$31,$4a,$61,$78,$8d,$a1,$b4,$c5,$d4,$e0,$eb,$f4,$fa,$fd
  13060.  DC.b $ff,$fd,$fa,$f4,$eb,$e0,$d4,$c5,$b4,$a1,$8d,$78,$61,$4a,$31,$18
  13061.  
  13062. mt_periods:
  13063.  DC.w $0358,$0328,$02fa,$02d0,$02a6,$0280,$025c,$023a,$021a,$01fc,$01e0
  13064.  DC.w $01c5,$01ac,$0194,$017d,$0168,$0153,$0140,$012e,$011d,$010d,$00fe
  13065.  DC.w $00f0,$00e2,$00d6,$00ca,$00be,$00b4,$00aa,$00a0,$0097,$008f,$0087
  13066.  DC.w $007f,$0078,$0071,$0000,$0000
  13067.  
  13068. reachedend: dc.b 0
  13069. mt_speed:    DC.b    6
  13070. mt_songpos:    DC.b    0
  13071. mt_pattpos:    DC.w    0
  13072. mt_counter:    DC.b    0
  13073.  
  13074. mt_break:    DC.b    0
  13075. mt_dmacon:    DC.w    0
  13076. mt_samplestarts:DS.L    $1f
  13077. mt_voice1:    DS.w    10
  13078.         DC.w    1
  13079.         DS.w    3
  13080. mt_voice2:    DS.w    10
  13081.         DC.w    2
  13082.         DS.w    3
  13083. mt_voice3:    DS.w    10
  13084.         DC.w    4
  13085.         DS.w    3
  13086. mt_voice4:    DS.w    10
  13087.         DC.w    8
  13088.         DS.w    3
  13089.  
  13090. CHEATPTR: dc.l 0
  13091. CHEATNUM: dc.l 0
  13092.  
  13093. testchip: dc.w 0
  13094.  
  13095. ;/* End of File */
  13096. mt_data: dc.l 0
  13097. tstchip: dc.l 0
  13098.  include "SERIAL_NIGHTMARE"
  13099.  
  13100. ingame:
  13101. ; incbin "ab3:includes/ingame"
  13102. gameover: incbin "ab3:includes/gameover"
  13103. welldone: incbin "ab3:includes/welldone"
  13104.  
  13105.  
  13106.